home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume9 / zmac / part02 < prev    next >
Encoding:
Internet Message Format  |  1987-03-11  |  59.0 KB

  1. Subject:  v09i025:  Z80 macro cross-assembler, Part02/02
  2. Newsgroups: mod.sources
  3. Approved: rs@mirror.TMC.COM
  4.  
  5. Submitted by: pyrnj!vu-vlsi!colin (Colin Kelley)
  6. Mod.sources: Volume 9, Issue 25
  7. Archive-name: zmac/Part02
  8.  
  9. #! /bin/sh
  10. # This is a shell archive, meaning:
  11. # 1. Remove everything above the #! /bin/sh line.
  12. # 2. Save the resulting text in a file.
  13. # 3. Execute the file with /bin/sh (not csh) to create the files:
  14. #    zdis.c serial.z serial.hex
  15. export PATH; PATH=/bin:$PATH
  16. echo shar: extracting "'zdis.c'" '(37358 characters)'
  17. if test -f 'zdis.c'
  18. then
  19.     echo shar: will not over-write existing file "'zdis.c'"
  20. else
  21. cat << \SHAR_EOF > 'zdis.c'
  22. char undefined[] = "undefined";
  23.  
  24. struct opcode {
  25.     char    *name;
  26.     int    args;
  27. };
  28.  
  29. struct opcode major[256] = {
  30.     "nop",            0,        /* 00 */
  31.     "ld    bc,%02x%02xh",    2,        /* 01 */
  32.     "ld    bc,a",        0,        /* 02 */
  33.     "inc    bc",        0,        /* 03 */
  34.     "inc    b",        0,        /* 04 */
  35.     "dec    b",        0,        /* 05 */
  36.     "ld    b,%02xh",    1,        /* 06 */
  37.     "rlc    a",        0,        /* 07 */
  38.  
  39.     "ex    af,af'",    0,        /* 08 */
  40.     "add    hl,bc",        0,        /* 09 */
  41.     "ld    a,(bc)",    0,        /* 0a */
  42.     "dec    bc",        0,        /* 0b */
  43.     "inc    c",        0,        /* 0c */
  44.     "dec    c",        0,        /* 0d */
  45.     "ld    c,%02xh",    1,        /* 0e */
  46.     "rrc    a",        0,        /* 0f */
  47.  
  48.     "djnz    %02xh",        1,        /* 10 */
  49.     "ld    de,%02x%02xh",    2,        /* 11 */
  50.     "ld    (de),a",    0,        /* 12 */
  51.     "inc    de",        0,        /* 13 */
  52.     "inc    d",        0,        /* 14 */
  53.     "dec    d",        0,        /* 15 */
  54.     "ld    d,%02xh",    1,        /* 16 */
  55.     "rla",            0,        /* 17 */
  56.  
  57.     "jr    %02xh",        1,        /* 18 */
  58.     "add    hl,de",        0,        /* 19 */
  59.     "ld    a,(de)",    0,        /* 1a */
  60.     "dec    de",        0,        /* 1b */
  61.     "inc    e",        0,        /* 1c */
  62.     "dec    e",        0,        /* 1d */
  63.     "ld    e,%02xh",    1,        /* 1e */
  64.     "rra",            0,        /* 1f */
  65.  
  66.     "jr    nz,%02xh",    1,        /* 20 */
  67.     "ld    hl,%02x%02xh",    2,        /* 21 */
  68.     "ld    (%02x%02xh),hl",2,        /* 22 */
  69.     "inc    hl",        0,        /* 23 */
  70.     "inc    h",        0,        /* 24 */
  71.     "dec    h",        0,        /* 25 */
  72.     "ld    h,%02xh",    1,        /* 26 */
  73.     "daa",            0,        /* 27 */
  74.  
  75.     "jr    z,%02xh",    1,        /* 28 */
  76.     "add    hl,hl",        0,        /* 29 */
  77.     "ld    hl,(%02x%02xh)",2,        /* 2a */
  78.     "dec    hl",        0,        /* 2b */
  79.     "inc    l",        0,        /* 2c */
  80.     "dec    l",        0,        /* 2d */
  81.     "ld    l,%02xh",    1,        /* 2e */
  82.     "cpl",            0,        /* 2f */
  83.  
  84.     "jr    nc,%02xh",    1,        /* 30 */
  85.     "ld    sp,%02x%02xh",    2,        /* 31 */
  86.     "ld    (%02x%02xh),a",    2,        /* 32 */
  87.     "inc    sp",        0,        /* 33 */
  88.     "inc    (hl)",        0,        /* 34 */
  89.     "dec    (hl)",        0,        /* 35 */
  90.     "ld    (hl),%02xh",    1,        /* 36 */
  91.     "scf",            0,        /* 37 */
  92.  
  93.     "jr    c,%02xh",    1,        /* 38 */
  94.     "add    hl,sp",        0,        /* 39 */
  95.     "ld    a,(%02x%02xh)",    2,        /* 3a */
  96.     "dec    sp",        0,        /* 3b */
  97.     "inc    a",        0,        /* 3c */
  98.     "dec    a",        0,        /* 3d */
  99.     "ld    a,%02xh",    1,        /* 3e */
  100.     "ccf",            0,        /* 3f */
  101.  
  102.     "ld    b,b",        0,        /* 40 */
  103.     "ld    b,c",        0,        /* 41 */
  104.     "ld    b,d",        0,        /* 42 */
  105.     "ld    b,e",        0,        /* 43 */
  106.     "ld    b,h",        0,        /* 44 */
  107.     "ld    b,l",        0,        /* 45 */
  108.     "ld    b,(hl)",    0,        /* 46 */
  109.     "ld    b,a",        0,        /* 47 */
  110.  
  111.     "ld    c,b",        0,        /* 48 */
  112.     "ld    c,c",        0,        /* 49 */
  113.     "ld    c,d",        0,        /* 4a */
  114.     "ld    c,e",        0,        /* 4b */
  115.     "ld    c,h",        0,        /* 4c */
  116.     "ld    c,l",        0,        /* 4d */
  117.     "ld    c,(hl)",    0,        /* 4e */
  118.     "ld    c,a",        0,        /* 4f */
  119.  
  120.     "ld    d,b",        0,        /* 50 */
  121.     "ld    d,c",        0,        /* 51 */
  122.     "ld    d,d",        0,        /* 52 */
  123.     "ld    d,e",        0,        /* 53 */
  124.     "ld    d,h",        0,        /* 54 */
  125.     "ld    d,l",        0,        /* 55 */
  126.     "ld    d,(hl)",    0,        /* 56 */
  127.     "ld    d,a",        0,        /* 57 */
  128.  
  129.     "ld    e,b",        0,        /* 58 */
  130.     "ld    e,c",        0,        /* 59 */
  131.     "ld    e,d",        0,        /* 5a */
  132.     "ld    e,e",        0,        /* 5b */
  133.     "ld    e,h",        0,        /* 5c */
  134.     "ld    e,l",        0,        /* 5d */
  135.     "ld    e,(hl)",    0,        /* 5e */
  136.     "ld    e,a",        0,        /* 5f */
  137.  
  138.     "ld    h,b",        0,        /* 60 */
  139.     "ld    h,c",        0,        /* 61 */
  140.     "ld    h,d",        0,        /* 62 */
  141.     "ld    h,e",        0,        /* 63 */
  142.     "ld    h,h",        0,        /* 64 */
  143.     "ld    h,l",        0,        /* 65 */
  144.     "ld    h,(hl)",    0,        /* 66 */
  145.     "ld    h,a",        0,        /* 67 */
  146.  
  147.     "ld    l,b",        0,        /* 68 */
  148.     "ld    l,c",        0,        /* 69 */
  149.     "ld    l,d",        0,        /* 6a */
  150.     "ld    l,e",        0,        /* 6b */
  151.     "ld    l,h",        0,        /* 6c */
  152.     "ld    l,l",        0,        /* 6d */
  153.     "ld    l,(hl)",    0,        /* 6e */
  154.     "ld    l,a",        0,        /* 6f */
  155.  
  156.     "ld    (hl),b",    0,        /* 70 */
  157.     "ld    (hl),c",    0,        /* 71 */
  158.     "ld    (hl),d",    0,        /* 72 */
  159.     "ld    (hl),e",    0,        /* 73 */
  160.     "ld    (hl),h",    0,        /* 74 */
  161.     "ld    (hl),l",    0,        /* 75 */
  162.     "halt",            0,        /* 76 */
  163.     "ld    (hl),a",    0,        /* 77 */
  164.  
  165.     "ld    a,b",        0,        /* 78 */
  166.     "ld    a,c",        0,        /* 79 */
  167.     "ld    a,d",        0,        /* 7a */
  168.     "ld    a,e",        0,        /* 7b */
  169.     "ld    a,h",        0,        /* 7c */
  170.     "ld    a,l",        0,        /* 7d */
  171.     "ld    a,(hl)",    0,        /* 7e */
  172.     "ld    a,a",        0,        /* 7f */
  173.  
  174.     "add    a,b",        0,        /* 80 */
  175.     "add    a,c",        0,        /* 81 */
  176.     "add    a,d",        0,        /* 82 */
  177.     "add    a,e",        0,        /* 83 */
  178.     "add    a,h",        0,        /* 84 */
  179.     "add    a,l",        0,        /* 85 */
  180.     "add    a,(hl)",    0,        /* 86 */
  181.     "add    a,a",        0,        /* 87 */
  182.  
  183.     "adc    a,b",        0,        /* 88 */
  184.     "adc    a,c",        0,        /* 89 */
  185.     "adc    a,d",        0,        /* 8a */
  186.     "adc    a,e",        0,        /* 8b */
  187.     "adc    a,h",        0,        /* 8c */
  188.     "adc    a,l",        0,        /* 8d */
  189.     "adc    a,(hl)",    0,        /* 8e */
  190.     "adc    a,a",        0,        /* 8f */
  191.  
  192.     "sub    b",        0,        /* 90 */
  193.     "sub    c",        0,        /* 91 */
  194.     "sub    d",        0,        /* 92 */
  195.     "sub    e",        0,        /* 93 */
  196.     "sub    h",        0,        /* 94 */
  197.     "sub    l",        0,        /* 95 */
  198.     "sub    (hl)",        0,        /* 96 */
  199.     "sub    a",        0,        /* 97 */
  200.  
  201.     "sbc    a,b",        0,        /* 98 */
  202.     "sbc    a,c",        0,        /* 99 */
  203.     "sbc    a,d",        0,        /* 9a */
  204.     "sbc    a,e",        0,        /* 9b */
  205.     "sbc    a,h",        0,        /* 9c */
  206.     "sbc    a,l",        0,        /* 9d */
  207.     "sbc    a,(hl)",    0,        /* 9e */
  208.     "sbc    a,a",        0,        /* 9f */
  209.  
  210.     "and    b",        0,        /* a0 */
  211.     "and    c",        0,        /* a1 */
  212.     "and    d",        0,        /* a2 */
  213.     "and    e",        0,        /* a3 */
  214.     "and    h",        0,        /* a4 */
  215.     "and    l",        0,        /* a5 */
  216.     "and    (hl)",        0,        /* a6 */
  217.     "and    a",        0,        /* a7 */
  218.  
  219.     "xor    b",        0,        /* a8 */
  220.     "xor    c",        0,        /* a9 */
  221.     "xor    d",        0,        /* aa */
  222.     "xor    e",        0,        /* ab */
  223.     "xor    h",        0,        /* ac */
  224.     "xor    l",        0,        /* ad */
  225.     "xor    (hl)",        0,        /* ae */
  226.     "xor    a",        0,        /* af */
  227.  
  228.     "or    b",        0,        /* b0 */
  229.     "or    c",        0,        /* b1 */
  230.     "or    d",        0,        /* b2 */
  231.     "or    e",        0,        /* b3 */
  232.     "or    h",        0,        /* b4 */
  233.     "or    l",        0,        /* b5 */
  234.     "or    (hl)",        0,        /* b6 */
  235.     "or    a",        0,        /* b7 */
  236.  
  237.     "cp    b",        0,        /* b8 */
  238.     "cp    c",        0,        /* b9 */
  239.     "cp    d",        0,        /* ba */
  240.     "cp    e",        0,        /* bb */
  241.     "cp    h",        0,        /* bc */
  242.     "cp    l",        0,        /* bd */
  243.     "cp    (hl)",        0,        /* be */
  244.     "cp    a",        0,        /* bf */
  245.  
  246.     "ret    nz",        0,        /* c0 */
  247.     "pop    bc",        0,        /* c1 */
  248.     "jp    nz,%02x%02xh",    2,        /* c2 */
  249.     "jp    %02x%02xh",    2,        /* c3 */
  250.     "call    nz,%02x%02xh",    2,        /* c4 */
  251.     "push    bc",        0,        /* c5 */
  252.     "add    a,%02xh",    1,        /* c6 */
  253.     "rst    0",        0,        /* c7 */
  254.  
  255.     "ret    z",        0,        /* c8 */
  256.     "ret",            0,        /* c9 */
  257.     "jp    z,%02x%02xh",    2,        /* ca */
  258.     0,            0,        /* cb */
  259.     "call    z,%02x%02xh",    2,        /* cc */
  260.     "call    %02x%02xh",    2,        /* cd */
  261.     "adc    a,%02xh",    1,        /* ce */
  262.     "rst    8",        0,        /* cf */
  263.     
  264.     "ret    nc",        0,        /* d0 */
  265.     "pop    de",        0,        /* d1 */
  266.     "jp    nc,%02x%02xh",    2,        /* d2 */
  267.     "out    (%02xh),a",    1,        /* d3 */
  268.     "call    nc,%02x%02xh",    2,        /* d4 */
  269.     "push    de",        0,        /* d5 */
  270.     "sub    %02xh",        1,        /* d6 */
  271.     "rst    10h",        0,        /* d7 */
  272.     
  273.     "ret    c",        0,        /* d8 */
  274.     "exx",            0,        /* d9 */
  275.     "jp    c,%02x%02xh",    2,        /* da */
  276.     "in    a,(%02xh)",    1,        /* db */
  277.     "call    c,%02x%02xh",    2,        /* dc */
  278.     0,            1,        /* dd */
  279.     "sbc    a,%02xh",    1,        /* de */
  280.     "rst    18h",        0,        /* df */
  281.     
  282.     "ret    po",        0,        /* e0 */
  283.     "pop    hl",        0,        /* e1 */
  284.     "jp    po,%02x%02xh",    2,        /* e2 */
  285.     "ex    (sp),hl",    0,        /* e3 */
  286.     "call    po,%02x%02xh",    2,        /* e4 */
  287.     "push    hl",        0,        /* e5 */
  288.     "and    %02xh",        1,        /* e6 */
  289.     "rst    20h",        0,        /* e7 */
  290.     "ret    pe",        0,        /* e8 */
  291.     
  292.     "jp    (hl)",        0,        /* e9 */
  293.     "jp    pe,%02x%02xh",    2,        /* ea */
  294.     "ex    de,hl",        0,        /* eb */
  295.     "call    pe,%02x%02xh",    2,        /* ec */
  296.     0,            2,        /* ed */
  297.     "xor    %02xh",        1,        /* ee */
  298.     "rst    28h",        0,        /* ef */
  299.     
  300.     "ret    p",        0,        /* f0 */
  301.     "pop    af",        0,        /* f1 */
  302.     "jp    p,%02x%02xh",    2,        /* f2 */
  303.     "di",            0,        /* f3 */
  304.     "call    p,%02x%02xh",    2,        /* f4 */
  305.     "push    af",        0,        /* f5 */
  306.     "or    %02xh",        1,        /* f6 */
  307.     "rst    30h",        0,        /* f7 */
  308.     
  309.     "ret    m",        0,        /* f8 */
  310.     "ld    sp,hl",        0,        /* f9 */
  311.     "jp    m,%02x%02xh",    2,        /* fa */
  312.     "ei",            0,        /* fb */
  313.     "call    m,%02x%02xh",    2,        /* fc */
  314.     0,            3,        /* fd */
  315.     "cp    %02xh",        1,        /* fe */
  316.     "rst    38h",        0,        /* ff */
  317. };
  318.  
  319. struct opcode minor[4][256] = {
  320.                             /* cb */
  321.     "rlc    b",        0,        /* cb00 */
  322.     "rlc    c",        0,        /* cb01 */
  323.     "rlc    d",        0,        /* cb02 */
  324.     "rlc    e",        0,        /* cb03 */
  325.     "rlc    h",        0,        /* cb04 */
  326.     "rlc    l",        0,        /* cb05 */
  327.     "rlc    (hl)",        0,        /* cb06 */
  328.     "rlc    a",        0,        /* cb07 */
  329.     
  330.     "rrc    b",        0,        /* cb08 */
  331.     "rrc    c",        0,        /* cb09 */
  332.     "rrc    d",        0,        /* cb0a */
  333.     "rrc    e",        0,        /* cb0b */
  334.     "rrc    h",        0,        /* cb0c */
  335.     "rrc    l",        0,        /* cb0d */
  336.     "rrc    (hl)",        0,        /* cb0e */
  337.     "rrc    a",        0,        /* cb0f */
  338.     
  339.     "rl    b",        0,        /* cb10 */
  340.     "rl    c",        0,        /* cb11 */
  341.     "rl    d",        0,        /* cb12 */
  342.     "rl    e",        0,        /* cb13 */
  343.     "rl    h",        0,        /* cb14 */
  344.     "rl    l",        0,        /* cb15 */
  345.     "rl    (hl)",        0,        /* cb16 */
  346.     "rl    a",        0,        /* cb17 */
  347.     
  348.     "rr    b",        0,        /* cb18 */
  349.     "rr    c",        0,        /* cb19 */
  350.     "rr    d",        0,        /* cb1a */
  351.     "rr    e",        0,        /* cb1b */
  352.     "rr    h",        0,        /* cb1c */
  353.     "rr    l",        0,        /* cb1d */
  354.     "rr    (hl)",        0,        /* cb1e */
  355.     "rr    a",        0,        /* cb1f */
  356.     
  357.     "sla    b",        0,        /* cb20 */
  358.     "sla    c",        0,        /* cb21 */
  359.     "sla    d",        0,        /* cb22 */
  360.     "sla    e",        0,        /* cb23 */
  361.     "sla    h",        0,        /* cb24 */
  362.     "sla    l",        0,        /* cb25 */
  363.     "sla    (hl)",        0,        /* cb26 */
  364.     "sla    a",        0,        /* cb27 */
  365.     
  366.     "sra    b",        0,        /* cb28 */
  367.     "sra    c",        0,        /* cb29 */
  368.     "sra    d",        0,        /* cb2a */
  369.     "sra    e",        0,        /* cb2b */
  370.     "sra    h",        0,        /* cb2c */
  371.     "sra    l",        0,        /* cb2d */
  372.     "sra    (hl)",        0,        /* cb2e */
  373.     "sra    a",        0,        /* cb2f */
  374.     
  375.     undefined,        0,        /* cb30 */
  376.     undefined,        0,        /* cb31 */
  377.     undefined,        0,        /* cb32 */
  378.     undefined,        0,        /* cb33 */
  379.     undefined,        0,        /* cb34 */
  380.     undefined,        0,        /* cb35 */
  381.     undefined,        0,        /* cb36 */
  382.     undefined,        0,        /* cb37 */
  383.     
  384.     "srl    b",        0,        /* cb38 */
  385.     "srl    c",        0,        /* cb39 */
  386.     "srl    d",        0,        /* cb3a */
  387.     "srl    e",        0,        /* cb3b */
  388.     "srl    h",        0,        /* cb3c */
  389.     "srl    l",        0,        /* cb3d */
  390.     "srl    (hl)",        0,        /* cb3e */
  391.     "srl    a",        0,        /* cb3f */
  392.     
  393.     "bit    0,b",        0,        /* cb40 */
  394.     "bit    0,c",        0,        /* cb41 */
  395.     "bit    0,d",        0,        /* cb42 */
  396.     "bit    0,e",        0,        /* cb43 */
  397.     "bit    0,h",        0,        /* cb44 */
  398.     "bit    0,l",        0,        /* cb45 */
  399.     "bit    0,(hl)",    0,        /* cb46 */
  400.     "bit    0,a",        0,        /* cb47 */
  401.     
  402.     "bit    1,b",        0,        /* cb48 */
  403.     "bit    1,c",        0,        /* cb49 */
  404.     "bit    1,d",        0,        /* cb4a */
  405.     "bit    1,e",        0,        /* cb4b */
  406.     "bit    1,h",        0,        /* cb4c */
  407.     "bit    1,l",        0,        /* cb4d */
  408.     "bit    1,(hl)",    0,        /* cb4e */
  409.     "bit    1,a",        0,        /* cb4f */
  410.     
  411.     "bit    2,b",        0,        /* cb50 */
  412.     "bit    2,c",        0,        /* cb51 */
  413.     "bit    2,d",        0,        /* cb52 */
  414.     "bit    2,e",        0,        /* cb53 */
  415.     "bit    2,h",        0,        /* cb54 */
  416.     "bit    2,l",        0,        /* cb55 */
  417.     "bit    2,(hl)",    0,        /* cb56 */
  418.     "bit    2,a",        0,        /* cb57 */
  419.     
  420.     "bit    3,b",        0,        /* cb58 */
  421.     "bit    3,c",        0,        /* cb59 */
  422.     "bit    3,d",        0,        /* cb5a */
  423.     "bit    3,e",        0,        /* cb5b */
  424.     "bit    3,h",        0,        /* cb5c */
  425.     "bit    3,l",        0,        /* cb5d */
  426.     "bit    3,(hl)",    0,        /* cb5e */
  427.     "bit    3,a",        0,        /* cb5f */
  428.     
  429.     "bit    4,b",        0,        /* cb60 */
  430.     "bit    4,c",        0,        /* cb61 */
  431.     "bit    4,d",        0,        /* cb62 */
  432.     "bit    4,e",        0,        /* cb63 */
  433.     "bit    4,h",        0,        /* cb64 */
  434.     "bit    4,l",        0,        /* cb65 */
  435.     "bit    4,(hl)",    0,        /* cb66 */
  436.     "bit    4,a",        0,        /* cb67 */
  437.     
  438.     "bit    5,b",        0,        /* cb68 */
  439.     "bit    5,c",        0,        /* cb69 */
  440.     "bit    5,d",        0,        /* cb6a */
  441.     "bit    5,e",        0,        /* cb6b */
  442.     "bit    5,h",        0,        /* cb6c */
  443.     "bit    5,l",        0,        /* cb6d */
  444.     "bit    5,(hl)",    0,        /* cb6e */
  445.     "bit    5,a",        0,        /* cb6f */
  446.     
  447.     "bit    6,b",        0,        /* cb70 */
  448.     "bit    6,c",        0,        /* cb71 */
  449.     "bit    6,d",        0,        /* cb72 */
  450.     "bit    6,e",        0,        /* cb73 */
  451.     "bit    6,h",        0,        /* cb74 */
  452.     "bit    6,l",        0,        /* cb75 */
  453.     "bit    6,(hl)",    0,        /* cb76 */
  454.     "bit    6,a",        0,        /* cb77 */
  455.     
  456.     "bit    7,b",        0,        /* cb78 */
  457.     "bit    7,c",        0,        /* cb79 */
  458.     "bit    7,d",        0,        /* cb7a */
  459.     "bit    7,e",        0,        /* cb7b */
  460.     "bit    7,h",        0,        /* cb7c */
  461.     "bit    7,l",        0,        /* cb7d */
  462.     "bit    7,(hl)",    0,        /* cb7e */
  463.     "bit    7,a",        0,        /* cb7f */
  464.     
  465.     "res    0,b",        0,        /* cb80 */
  466.     "res    0,c",        0,        /* cb81 */
  467.     "res    0,d",        0,        /* cb82 */
  468.     "res    0,e",        0,        /* cb83 */
  469.     "res    0,h",        0,        /* cb84 */
  470.     "res    0,l",        0,        /* cb85 */
  471.     "res    0,(hl)",    0,        /* cb86 */
  472.     "res    0,a",        0,        /* cb87 */
  473.     
  474.     "res    1,b",        0,        /* cb88 */
  475.     "res    1,c",        0,        /* cb89 */
  476.     "res    1,d",        0,        /* cb8a */
  477.     "res    1,e",        0,        /* cb8b */
  478.     "res    1,h",        0,        /* cb8c */
  479.     "res    1,l",        0,        /* cb8d */
  480.     "res    1,(hl)",    0,        /* cb8e */
  481.     "res    1,a",        0,        /* cb8f */
  482.     
  483.     "res    2,b",        0,        /* cb90 */
  484.     "res    2,c",        0,        /* cb91 */
  485.     "res    2,d",        0,        /* cb92 */
  486.     "res    2,e",        0,        /* cb93 */
  487.     "res    2,h",        0,        /* cb94 */
  488.     "res    2,l",        0,        /* cb95 */
  489.     "res    2,(hl)",    0,        /* cb96 */
  490.     "res    2,a",        0,        /* cb97 */
  491.     
  492.     "res    3,b",        0,        /* cb98 */
  493.     "res    3,c",        0,        /* cb99 */
  494.     "res    3,d",        0,        /* cb9a */
  495.     "res    3,e",        0,        /* cb9b */
  496.     "res    3,h",        0,        /* cb9c */
  497.     "res    3,l",        0,        /* cb9d */
  498.     "res    3,(hl)",    0,        /* cb9e */
  499.     "res    3,a",        0,        /* cb9f */
  500.     
  501.     "res    4,b",        0,        /* cba0 */
  502.     "res    4,c",        0,        /* cba1 */
  503.     "res    4,d",        0,        /* cba2 */
  504.     "res    4,e",        0,        /* cba3 */
  505.     "res    4,h",        0,        /* cba4 */
  506.     "res    4,l",        0,        /* cba5 */
  507.     "res    4,(hl)",    0,        /* cba6 */
  508.     "res    4,a",        0,        /* cba7 */
  509.     
  510.     "res    5,b",        0,        /* cba8 */
  511.     "res    5,c",        0,        /* cba9 */
  512.     "res    5,d",        0,        /* cbaa */
  513.     "res    5,e",        0,        /* cbab */
  514.     "res    5,h",        0,        /* cbac */
  515.     "res    5,l",        0,        /* cbad */
  516.     "res    5,(hl)",    0,        /* cbae */
  517.     "res    5,a",        0,        /* cbaf */
  518.     
  519.     "res    6,b",        0,        /* cbb0 */
  520.     "res    6,c",        0,        /* cbb1 */
  521.     "res    6,d",        0,        /* cbb2 */
  522.     "res    6,e",        0,        /* cbb3 */
  523.     "res    6,h",        0,        /* cbb4 */
  524.     "res    6,l",        0,        /* cbb5 */
  525.     "res    6,(hl)",    0,        /* cbb6 */
  526.     "res    6,a",        0,        /* cbb7 */
  527.     
  528.     "res    7,b",        0,        /* cbb8 */
  529.     "res    7,c",        0,        /* cbb9 */
  530.     "res    7,d",        0,        /* cbba */
  531.     "res    7,e",        0,        /* cbbb */
  532.     "res    7,h",        0,        /* cbbc */
  533.     "res    7,l",        0,        /* cbbd */
  534.     "res    7,(hl)",    0,        /* cbbe */
  535.     "res    7,a",        0,        /* cbbf */
  536.     
  537.     "set    0,b",        0,        /* cbc0 */
  538.     "set    0,c",        0,        /* cbc1 */
  539.     "set    0,d",        0,        /* cbc2 */
  540.     "set    0,e",        0,        /* cbc3 */
  541.     "set    0,h",        0,        /* cbc4 */
  542.     "set    0,l",        0,        /* cbc5 */
  543.     "set    0,(hl)",    0,        /* cbc6 */
  544.     "set    0,a",        0,        /* cbc7 */
  545.     
  546.     "set    1,b",        0,        /* cbc8 */
  547.     "set    1,c",        0,        /* cbc9 */
  548.     "set    1,d",        0,        /* cbca */
  549.     "set    1,e",        0,        /* cbcb */
  550.     "set    1,h",        0,        /* cbcc */
  551.     "set    1,l",        0,        /* cbcd */
  552.     "set    1,(hl)",    0,        /* cbce */
  553.     "set    1,a",        0,        /* cbcf */
  554.     
  555.     "set    2,b",        0,        /* cbd0 */
  556.     "set    2,c",        0,        /* cbd1 */
  557.     "set    2,d",        0,        /* cbd2 */
  558.     "set    2,e",        0,        /* cbd3 */
  559.     "set    2,h",        0,        /* cbd4 */
  560.     "set    2,l",        0,        /* cbd5 */
  561.     "set    2,(hl)",    0,        /* cbd6 */
  562.     "set    2,a",        0,        /* cbd7 */
  563.     
  564.     "set    3,b",        0,        /* cbd8 */
  565.     "set    3,c",        0,        /* cbd9 */
  566.     "set    3,d",        0,        /* cbda */
  567.     "set    3,e",        0,        /* cbdb */
  568.     "set    3,h",        0,        /* cbdc */
  569.     "set    3,l",        0,        /* cbdd */
  570.     "set    3,(hl)",    0,        /* cbde */
  571.     "set    3,a",        0,        /* cbdf */
  572.     
  573.     "set    4,b",        0,        /* cbe0 */
  574.     "set    4,c",        0,        /* cbe1 */
  575.     "set    4,d",        0,        /* cbe2 */
  576.     "set    4,e",        0,        /* cbe3 */
  577.     "set    4,h",        0,        /* cbe4 */
  578.     "set    4,l",        0,        /* cbe5 */
  579.     "set    4,(hl)",    0,        /* cbe6 */
  580.     "set    4,a",        0,        /* cbe7 */
  581.     
  582.     "set    5,b",        0,        /* cbe8 */
  583.     "set    5,c",        0,        /* cbe9 */
  584.     "set    5,d",        0,        /* cbea */
  585.     "set    5,e",        0,        /* cbeb */
  586.     "set    5,h",        0,        /* cbec */
  587.     "set    5,l",        0,        /* cbed */
  588.     "set    5,(hl)",    0,        /* cbee */
  589.     "set    5,a",        0,        /* cbef */
  590.     
  591.     "set    6,b",        0,        /* cbf0 */
  592.     "set    6,c",        0,        /* cbf1 */
  593.     "set    6,d",        0,        /* cbf2 */
  594.     "set    6,e",        0,        /* cbf3 */
  595.     "set    6,h",        0,        /* cbf4 */
  596.     "set    6,l",        0,        /* cbf5 */
  597.     "set    6,(hl)",    0,        /* cbf6 */
  598.     "set    6,a",        0,        /* cbf7 */
  599.     
  600.     "set    7,b",        0,        /* cbf8 */
  601.     "set    7,c",        0,        /* cbf9 */
  602.     "set    7,d",        0,        /* cbfa */
  603.     "set    7,e",        0,        /* cbfb */
  604.     "set    7,h",        0,        /* cbfc */
  605.     "set    7,l",        0,        /* cbfd */
  606.     "set    7,(hl)",    0,        /* cbfe */
  607.     "set    7,a",        0,        /* cbff */
  608.                             /* dd */
  609.     undefined,        0,        /* dd00 */
  610.     undefined,        0,        /* dd01 */
  611.     undefined,        0,        /* dd02 */
  612.     undefined,        0,        /* dd03 */
  613.     undefined,        0,        /* dd04 */
  614.     undefined,        0,        /* dd05 */
  615.     undefined,        0,        /* dd06 */
  616.     undefined,        0,        /* dd07 */
  617.  
  618.     undefined,        0,        /* dd08 */
  619.     "add    ix,bc",        0,        /* dd09 */
  620.     undefined,        0,        /* dd0a */
  621.     undefined,        0,        /* dd0b */
  622.     undefined,        0,        /* dd0c */
  623.     undefined,        0,        /* dd0d */
  624.     undefined,        0,        /* dd0e */
  625.     undefined,        0,        /* dd0f */
  626.  
  627.     undefined,        0,        /* dd10 */
  628.     undefined,        0,        /* dd11 */
  629.     undefined,        0,        /* dd12 */
  630.     undefined,        0,        /* dd13 */
  631.     undefined,        0,        /* dd14 */
  632.     undefined,        0,        /* dd15 */
  633.     undefined,        0,        /* dd16 */
  634.     undefined,        0,        /* dd17 */
  635.  
  636.     undefined,        0,        /* dd18 */
  637.     "add    ix,de",        0,        /* dd19 */
  638.     undefined,        0,        /* dd1a */
  639.     undefined,        0,        /* dd1b */
  640.     undefined,        0,        /* dd1c */
  641.     undefined,        0,        /* dd1d */
  642.     undefined,        0,        /* dd1e */
  643.     undefined,        0,        /* dd1f */
  644.  
  645.     undefined,        0,        /* dd20 */
  646.     "ld    ix,%02x%02xh",    2,        /* dd21 */
  647.     "ld    (%02x%02xh),ix",2,        /* dd22 */
  648.     "inc    ix",        0,        /* dd23 */
  649.     undefined,        0,        /* dd24 */
  650.     undefined,        0,        /* dd25 */
  651.     undefined,        0,        /* dd26 */
  652.     undefined,        0,        /* dd27 */
  653.  
  654.     undefined,        0,        /* dd28 */
  655.     "add    ix,ix",        0,        /* dd29 */
  656.     "ld    ix,(%02x%02xh)",2,        /* dd2a */
  657.     "dec    ix",        0,        /* dd2b */
  658.     undefined,        0,        /* dd2c */
  659.     undefined,        0,        /* dd2d */
  660.     undefined,        0,        /* dd2e */
  661.     undefined,        0,        /* dd2f */
  662.  
  663.     undefined,        0,        /* dd30 */
  664.     undefined,        0,        /* dd31 */
  665.     undefined,        0,        /* dd32 */
  666.     undefined,        0,        /* dd33 */
  667.     "inc    (ix+%02xh)",    1,        /* dd34 */
  668.     "dec    (ix+%02xh)",    1,        /* dd35 */
  669.     "ld    (ix+%02xh),%02xh",2,        /* dd36 */
  670.     undefined,        0,        /* dd37 */
  671.  
  672.     undefined,        0,        /* dd38 */
  673.     "add    ix,sp",        0,        /* dd39 */
  674.     undefined,        0,        /* dd3a */
  675.     undefined,        0,        /* dd3b */
  676.     undefined,        0,        /* dd3c */
  677.     undefined,        0,        /* dd3d */
  678.     undefined,        0,        /* dd3e */
  679.     undefined,        0,        /* dd3f */
  680.  
  681.     undefined,        0,        /* dd40 */
  682.     undefined,        0,        /* dd41 */
  683.     undefined,        0,        /* dd42 */
  684.     undefined,        0,        /* dd43 */
  685.     undefined,        0,        /* dd44 */
  686.     undefined,        0,        /* dd45 */
  687.     "ld    b,(ix+%02xh)",    1,        /* dd46 */
  688.     undefined,        0,        /* dd47 */
  689.  
  690.     undefined,        0,        /* dd48 */
  691.     undefined,        0,        /* dd49 */
  692.     undefined,        0,        /* dd4a */
  693.     undefined,        0,        /* dd4b */
  694.     undefined,        0,        /* dd4c */
  695.     undefined,        0,        /* dd4d */
  696.     "ld    c,(ix+%02xh)",    1,        /* dd4e */
  697.     undefined,        0,        /* dd4f */
  698.     
  699.     undefined,        0,        /* dd50 */
  700.     undefined,        0,        /* dd51 */
  701.     undefined,        0,        /* dd52 */
  702.     undefined,        0,        /* dd53 */
  703.     undefined,        0,        /* dd54 */
  704.     undefined,        0,        /* dd55 */
  705.     "ld    d,(ix+%02xh)",    1,        /* dd56 */
  706.     undefined,        0,        /* dd57 */
  707.  
  708.     undefined,        0,        /* dd58 */
  709.     undefined,        0,        /* dd59 */
  710.     undefined,        0,        /* dd5a */
  711.     undefined,        0,        /* dd5b */
  712.     undefined,        0,        /* dd5c */
  713.     undefined,        0,        /* dd5d */
  714.     "ld    e,(ix+%02xh)",    1,        /* dd5e */
  715.     undefined,        0,        /* dd5f */
  716.     
  717.     undefined,        0,        /* dd60 */
  718.     undefined,        0,        /* dd61 */
  719.     undefined,        0,        /* dd62 */
  720.     undefined,        0,        /* dd63 */
  721.     undefined,        0,        /* dd64 */
  722.     undefined,        0,        /* dd65 */
  723.     "ld    h,(ix+%02xh)",    1,        /* dd66 */
  724.     undefined,        0,        /* dd67 */
  725.  
  726.     undefined,        0,        /* dd68 */
  727.     undefined,        0,        /* dd69 */
  728.     undefined,        0,        /* dd6a */
  729.     undefined,        0,        /* dd6b */
  730.     undefined,        0,        /* dd6c */
  731.     undefined,        0,        /* dd6d */
  732.     "ld    l,(ix+%02xh)",    1,        /* dd6e */
  733.     undefined,        0,        /* dd6f */
  734.     
  735.     "ld    (ix+%02xh),b",    1,        /* dd70 */
  736.     "ld    (ix+%02xh),c",    1,        /* dd71 */
  737.     "ld    (ix+%02xh),d",    1,        /* dd72 */
  738.     "ld    (ix+%02xh),e",    1,        /* dd73 */
  739.     "ld    (ix+%02xh),h",    1,        /* dd74 */
  740.     "ld    (ix+%02xh),l",    1,        /* dd75 */
  741.     undefined,        0,        /* dd76 */
  742.     "ld    (ix+%02xh),a",    1,        /* dd77 */
  743.  
  744.     undefined,        0,        /* dd78 */
  745.     undefined,        0,        /* dd79 */
  746.     undefined,        0,        /* dd7a */
  747.     undefined,        0,        /* dd7b */
  748.     undefined,        0,        /* dd7c */
  749.     undefined,        0,        /* dd7d */
  750.     "ld    a,(ix+%02xh)",    1,        /* dd7e */
  751.     undefined,        0,        /* dd7f */
  752.  
  753.     undefined,        0,        /* dd80 */
  754.     undefined,        0,        /* dd81 */
  755.     undefined,        0,        /* dd82 */
  756.     undefined,        0,        /* dd83 */
  757.     undefined,        0,        /* dd84 */
  758.     undefined,        0,        /* dd85 */
  759.     "add    a,(ix+%02xh)",    1,        /* dd86 */
  760.     undefined,        0,        /* dd87 */
  761.  
  762.     undefined,        0,        /* dd88 */
  763.     undefined,        0,        /* dd89 */
  764.     undefined,        0,        /* dd8a */
  765.     undefined,        0,        /* dd8b */
  766.     undefined,        0,        /* dd8c */
  767.     undefined,        0,        /* dd8d */
  768.     "adc    a,(ix+%02xh)",    1,        /* dd8e */
  769.     undefined,        0,        /* dd8f */
  770.     
  771.     undefined,        0,        /* dd90 */
  772.     undefined,        0,        /* dd91 */
  773.     undefined,        0,        /* dd92 */
  774.     undefined,        0,        /* dd93 */
  775.     undefined,        0,        /* dd94 */
  776.     undefined,        0,        /* dd95 */
  777.     "sub    (ix+%02xh)",    1,        /* dd96 */
  778.     undefined,        0,        /* dd97 */
  779.  
  780.     undefined,        0,        /* dd98 */
  781.     undefined,        0,        /* dd99 */
  782.     undefined,        0,        /* dd9a */
  783.     undefined,        0,        /* dd9b */
  784.     undefined,        0,        /* dd9c */
  785.     undefined,        0,        /* dd9d */
  786.     "sbc    a,(ix+%02xh)",    1,        /* dd9e */
  787.     undefined,        0,        /* dd9f */
  788.     
  789.     undefined,        0,        /* dda0 */
  790.     undefined,        0,        /* dda1 */
  791.     undefined,        0,        /* dda2 */
  792.     undefined,        0,        /* dda3 */
  793.     undefined,        0,        /* dda4 */
  794.     undefined,        0,        /* dda5 */
  795.     "and    (ix+%02xh)",    1,        /* dda6 */
  796.     undefined,        0,        /* dda7 */
  797.  
  798.     undefined,        0,        /* dda8 */
  799.     undefined,        0,        /* dda9 */
  800.     undefined,        0,        /* ddaa */
  801.     undefined,        0,        /* ddab */
  802.     undefined,        0,        /* ddac */
  803.     undefined,        0,        /* ddad */
  804.     "xor    (ix+%02xh)",    1,        /* ddae */
  805.     undefined,        0,        /* ddaf */
  806.     
  807.     undefined,        0,        /* ddb0 */
  808.     undefined,        0,        /* ddb1 */
  809.     undefined,        0,        /* ddb2 */
  810.     undefined,        0,        /* ddb3 */
  811.     undefined,        0,        /* ddb4 */
  812.     undefined,        0,        /* ddb5 */
  813.     "or    (ix+%02xh)",    1,        /* ddb6 */
  814.     undefined,        0,        /* ddb7 */
  815.  
  816.     undefined,        0,        /* ddb8 */
  817.     undefined,        0,        /* ddb9 */
  818.     undefined,        0,        /* ddba */
  819.     undefined,        0,        /* ddbb */
  820.     undefined,        0,        /* ddbc */
  821.     undefined,        0,        /* ddbd */
  822.     "cp    (ix+%02xh)",    1,        /* ddbe */
  823.     undefined,        0,        /* ddbf */
  824.     
  825.     undefined,        0,        /* ddc0 */
  826.     undefined,        0,        /* ddc1 */
  827.     undefined,        0,        /* ddc2 */
  828.     undefined,        0,        /* ddc3 */
  829.     undefined,        0,        /* ddc4 */
  830.     undefined,        0,        /* ddc5 */
  831.     undefined,        0,        /* ddc6 */
  832.     undefined,        0,        /* ddc7 */
  833.  
  834.     undefined,        0,        /* ddc8 */
  835.     undefined,        0,        /* ddc9 */
  836.     undefined,        0,        /* ddca */
  837.     "dd cb    %02x,%02x",    2,        /* ddcb */
  838.     undefined,        0,        /* ddcc */
  839.     undefined,        0,        /* ddcd */
  840.     undefined,        0,        /* ddce */
  841.     undefined,        0,        /* ddcf */
  842.     
  843.     undefined,        0,        /* ddd0 */
  844.     undefined,        0,        /* ddd1 */
  845.     undefined,        0,        /* ddd2 */
  846.     undefined,        0,        /* ddd3 */
  847.     undefined,        0,        /* ddd4 */
  848.     undefined,        0,        /* ddd5 */
  849.     undefined,        0,        /* ddd6 */
  850.     undefined,        0,        /* ddd7 */
  851.  
  852.     undefined,        0,        /* ddd8 */
  853.     undefined,        0,        /* ddd9 */
  854.     undefined,        0,        /* ddda */
  855.     undefined,        0,        /* dddb */
  856.     undefined,        0,        /* dddc */
  857.     undefined,        0,        /* dddd */
  858.     undefined,        0,        /* ddde */
  859.     undefined,        0,        /* dddf */
  860.     
  861.     undefined,        0,        /* dde0 */
  862.     "pop    ix",        0,        /* dde1 */
  863.     undefined,        0,        /* dde2 */
  864.     "ex    (sp),ix",    0,        /* dde3 */
  865.     undefined,        0,        /* dde4 */
  866.     "push    ix",        0,        /* dde5 */
  867.     undefined,        0,        /* dde6 */
  868.     undefined,        0,        /* dde7 */
  869.  
  870.     undefined,        0,        /* dde8 */
  871.     "jp    (ix)",        0,        /* dde9 */
  872.     undefined,        0,        /* ddea */
  873.     undefined,        0,        /* ddeb */
  874.     undefined,        0,        /* ddec */
  875.     undefined,        0,        /* dded */
  876.     undefined,        0,        /* ddee */
  877.     undefined,        0,        /* ddef */
  878.     
  879.     undefined,        0,        /* ddf0 */
  880.     undefined,        0,        /* ddf1 */
  881.     undefined,        0,        /* ddf2 */
  882.     undefined,        0,        /* ddf3 */
  883.     undefined,        0,        /* ddf4 */
  884.     undefined,        0,        /* ddf5 */
  885.     undefined,        0,        /* ddf6 */
  886.     undefined,        0,        /* ddf7 */
  887.  
  888.     undefined,        0,        /* ddf8 */
  889.     "ld    sp,ix",        0,        /* ddf9 */
  890.     undefined,        0,        /* ddfa */
  891.     undefined,        0,        /* ddfb */
  892.     undefined,        0,        /* ddfc */
  893.     undefined,        0,        /* ddfd */
  894.     undefined,        0,        /* ddfe */
  895.     undefined,        0,        /* ddff */
  896.                             /* ed */
  897.     undefined,        0,        /* ed00 */
  898.     undefined,        0,        /* ed01 */
  899.     undefined,        0,        /* ed02 */
  900.     undefined,        0,        /* ed03 */
  901.     undefined,        0,        /* ed04 */
  902.     undefined,        0,        /* ed05 */
  903.     undefined,        0,        /* ed06 */
  904.     undefined,        0,        /* ed07 */
  905.  
  906.     undefined,        0,        /* ed08 */
  907.     undefined,        0,        /* ed09 */
  908.     undefined,        0,        /* ed0a */
  909.     undefined,        0,        /* ed0b */
  910.     undefined,        0,        /* ed0c */
  911.     undefined,        0,        /* ed0d */
  912.     undefined,        0,        /* ed0e */
  913.     undefined,        0,        /* ed0f */
  914.  
  915.     undefined,        0,        /* ed10 */
  916.     undefined,        0,        /* ed11 */
  917.     undefined,        0,        /* ed12 */
  918.     undefined,        0,        /* ed13 */
  919.     undefined,        0,        /* ed14 */
  920.     undefined,        0,        /* ed15 */
  921.     undefined,        0,        /* ed16 */
  922.     undefined,        0,        /* ed17 */
  923.  
  924.     undefined,        0,        /* ed18 */
  925.     undefined,        0,        /* ed19 */
  926.     undefined,        0,        /* ed1a */
  927.     undefined,        0,        /* ed1b */
  928.     undefined,        0,        /* ed1c */
  929.     undefined,        0,        /* ed1d */
  930.     undefined,        0,        /* ed1e */
  931.     undefined,        0,        /* ed1f */
  932.  
  933.     undefined,        0,        /* ed20 */
  934.     undefined,        0,        /* ed21 */
  935.     undefined,        0,        /* ed22 */
  936.     undefined,        0,        /* ed23 */
  937.     undefined,        0,        /* ed24 */
  938.     undefined,        0,        /* ed25 */
  939.     undefined,        0,        /* ed26 */
  940.     undefined,        0,        /* ed27 */
  941.  
  942.     undefined,        0,        /* ed28 */
  943.     undefined,        0,        /* ed29 */
  944.     undefined,        0,        /* ed2a */
  945.     undefined,        0,        /* ed2b */
  946.     undefined,        0,        /* ed2c */
  947.     undefined,        0,        /* ed2d */
  948.     undefined,        0,        /* ed2e */
  949.     undefined,        0,        /* ed2f */
  950.  
  951.     undefined,        0,        /* ed30 */
  952.     undefined,        0,        /* ed31 */
  953.     undefined,        0,        /* ed32 */
  954.     undefined,        0,        /* ed33 */
  955.     undefined,        0,        /* ed34 */
  956.     undefined,        0,        /* ed35 */
  957.     undefined,        0,        /* ed36 */
  958.     undefined,        0,        /* ed37 */
  959.  
  960.     undefined,        0,        /* ed38 */
  961.     undefined,        0,        /* ed39 */
  962.     undefined,        0,        /* ed3a */
  963.     undefined,        0,        /* ed3b */
  964.     undefined,        0,        /* ed3c */
  965.     undefined,        0,        /* ed3d */
  966.     undefined,        0,        /* ed3e */
  967.     undefined,        0,        /* ed3f */
  968.  
  969.     "in    b,(c)",        0,        /* ed40 */
  970.     "out    (c),b",        0,        /* ed41 */
  971.     "sbc    hl,bc",        0,        /* ed42 */
  972.     "ld    (%02x%02xh),bc",2,        /* ed43 */
  973.     "neg",            0,        /* ed44 */
  974.     "retn",            0,        /* ed45 */
  975.     "im    0",        0,        /* ed46 */
  976.     "ld    i,a",        0,        /* ed47 */
  977.     
  978.     "in    c,(c)",        0,        /* ed48 */
  979.     "out    (c),c",        0,        /* ed49 */
  980.     "adc    hl,bc",        0,        /* ed4a */
  981.     "ld    bc,(%02x%02xh)",2,        /* ed4b */
  982.     undefined,        0,        /* ed4c */
  983.     "reti",            0,        /* ed4d */
  984.     undefined,        0,        /* ed4e */
  985.     undefined,        0,        /* ed4f */
  986.  
  987.     "in    d,(c)",        0,        /* ed50 */
  988.     "out    (c),d",        0,        /* ed51 */
  989.     "sbc    hl,de",        0,        /* ed52 */
  990.     "ld    (%02x%02xh),de",2,        /* ed53 */
  991.     undefined,        0,        /* ed54 */
  992.     undefined,        0,        /* ed55 */
  993.     "im    1",        0,        /* ed56 */
  994.     "ld    a,i",        0,        /* ed57 */
  995.  
  996.     "in    e,(c)",        0,        /* ed58 */
  997.     "out    (c),e",        0,        /* ed59 */
  998.     "adc    hl,de",        0,        /* ed5a */
  999.     "ld    de,(%02x%02xh)",2,        /* ed5b */
  1000.     undefined,        0,        /* ed5c */
  1001.     undefined,        0,        /* ed5d */
  1002.     "im    2",        0,        /* ed5e */
  1003.     undefined,        0,        /* ed5f */
  1004.  
  1005.     "in    h,(c)",        0,        /* ed60 */
  1006.     "out    (c),h",        0,        /* ed61 */
  1007.     "sbc    hl,hl",        0,        /* ed62 */
  1008.     undefined,        0,        /* ed63 */
  1009.     undefined,        0,        /* ed64 */
  1010.     undefined,        0,        /* ed65 */
  1011.     undefined,        0,        /* ed66 */
  1012.     "rrd",            0,        /* ed67 */
  1013.  
  1014.     "in    l,(c)",        0,        /* ed68 */
  1015.     "out    (c),l",        0,        /* ed69 */
  1016.     "adc    hl,hl",        0,        /* ed6a */
  1017.     undefined,        0,        /* ed6b */
  1018.     undefined,        0,        /* ed6c */
  1019.     undefined,        0,        /* ed6d */
  1020.     undefined,        0,        /* ed6e */
  1021.     "rld",            0,        /* ed6f */
  1022.     
  1023.     undefined,        0,        /* ed70 */
  1024.     undefined,        0,        /* ed71 */
  1025.     "sbc    hl,sp",        0,        /* ed72 */
  1026.     "ld    (%02x%02xh),sp",2,        /* ed73 */
  1027.     undefined,        0,        /* ed74 */
  1028.     undefined,        0,        /* ed75 */
  1029.     undefined,        0,        /* ed76 */
  1030.     undefined,        0,        /* ed77 */
  1031.  
  1032.     "in    a,(c)",        0,        /* ed78 */
  1033.     "out    (c),a",        0,        /* ed79 */
  1034.     "adc    hl,sp",        0,        /* ed7a */
  1035.     "ld    sp,(%02x%02xh)",2,        /* ed7b */
  1036.     undefined,        0,        /* ed7c */
  1037.     undefined,        0,        /* ed7d */
  1038.     undefined,        0,        /* ed7e */
  1039.     undefined,        0,        /* ed7f */
  1040.  
  1041.     undefined,        0,        /* ed80 */
  1042.     undefined,        0,        /* ed81 */
  1043.     undefined,        0,        /* ed82 */
  1044.     undefined,        0,        /* ed83 */
  1045.     undefined,        0,        /* ed84 */
  1046.     undefined,        0,        /* ed85 */
  1047.     undefined,        0,        /* ed86 */
  1048.     undefined,        0,        /* ed87 */
  1049.  
  1050.     undefined,        0,        /* ed88 */
  1051.     undefined,        0,        /* ed89 */
  1052.     undefined,        0,        /* ed8a */
  1053.     undefined,        0,        /* ed8b */
  1054.     undefined,        0,        /* ed8c */
  1055.     undefined,        0,        /* ed8d */
  1056.     undefined,        0,        /* ed8e */
  1057.     undefined,        0,        /* ed8f */
  1058.  
  1059.     undefined,        0,        /* ed90 */
  1060.     undefined,        0,        /* ed91 */
  1061.     undefined,        0,        /* ed92 */
  1062.     undefined,        0,        /* ed93 */
  1063.     undefined,        0,        /* ed94 */
  1064.     undefined,        0,        /* ed95 */
  1065.     undefined,        0,        /* ed96 */
  1066.     undefined,        0,        /* ed97 */
  1067.  
  1068.     undefined,        0,        /* ed98 */
  1069.     undefined,        0,        /* ed99 */
  1070.     undefined,        0,        /* ed9a */
  1071.     undefined,        0,        /* ed9b */
  1072.     undefined,        0,        /* ed9c */
  1073.     undefined,        0,        /* ed9d */
  1074.     undefined,        0,        /* ed9e */
  1075.     undefined,        0,        /* ed9f */
  1076.  
  1077.     "ldi",            0,        /* eda0 */
  1078.     "cpi",            0,        /* eda1 */
  1079.     "ini",            0,        /* eda2 */
  1080.     "outi",            0,        /* eda3 */
  1081.     undefined,        0,        /* eda4 */
  1082.     undefined,        0,        /* eda5 */
  1083.     undefined,        0,        /* eda6 */
  1084.     undefined,        0,        /* eda7 */
  1085.  
  1086.     "ldd",            0,        /* eda8 */
  1087.     "cpd",            0,        /* eda9 */
  1088.     "ind",            0,        /* edaa */
  1089.     "outd",            0,        /* edab */
  1090.     undefined,        0,        /* edac */
  1091.     undefined,        0,        /* edad */
  1092.     undefined,        0,        /* edae */
  1093.     undefined,        0,        /* edaf */
  1094.  
  1095.     "ldir",            0,        /* edb0 */
  1096.     "cpir",            0,        /* edb1 */
  1097.     "inir",            0,        /* edb2 */
  1098.     "otir",            0,        /* edb3 */
  1099.     undefined,        0,        /* edb4 */
  1100.     undefined,        0,        /* edb5 */
  1101.     undefined,        0,        /* edb6 */
  1102.     undefined,        0,        /* edb7 */
  1103.  
  1104.     "lddr",            0,        /* edb8 */
  1105.     "cpdr",            0,        /* edb9 */
  1106.     "indr",            0,        /* edba */
  1107.     "otdr",            0,        /* edbb */
  1108.     undefined,        0,        /* edbc */
  1109.     undefined,        0,        /* edbd */
  1110.     undefined,        0,        /* edbe */
  1111.     undefined,        0,        /* edbf */
  1112.  
  1113.     undefined,        0,        /* edc0 */
  1114.     undefined,        0,        /* edc1 */
  1115.     undefined,        0,        /* edc2 */
  1116.     undefined,        0,        /* edc3 */
  1117.     undefined,        0,        /* edc4 */
  1118.     undefined,        0,        /* edc5 */
  1119.     undefined,        0,        /* edc6 */
  1120.     undefined,        0,        /* edc7 */
  1121.  
  1122.     undefined,        0,        /* edc8 */
  1123.     undefined,        0,        /* edc9 */
  1124.     undefined,        0,        /* edca */
  1125.     undefined,        0,        /* edcb */
  1126.     undefined,        0,        /* edcc */
  1127.     undefined,        0,        /* edcd */
  1128.     undefined,        0,        /* edce */
  1129.     undefined,        0,        /* edcf */
  1130.  
  1131.     undefined,        0,        /* edd0 */
  1132.     undefined,        0,        /* edd1 */
  1133.     undefined,        0,        /* edd2 */
  1134.     undefined,        0,        /* edd3 */
  1135.     undefined,        0,        /* edd4 */
  1136.     undefined,        0,        /* edd5 */
  1137.     undefined,        0,        /* edd6 */
  1138.     undefined,        0,        /* edd7 */
  1139.  
  1140.     undefined,        0,        /* edd8 */
  1141.     undefined,        0,        /* edd9 */
  1142.     undefined,        0,        /* edda */
  1143.     undefined,        0,        /* eddb */
  1144.     undefined,        0,        /* eddc */
  1145.     undefined,        0,        /* eddd */
  1146.     undefined,        0,        /* edde */
  1147.     undefined,        0,        /* eddf */
  1148.  
  1149.     undefined,        0,        /* ede0 */
  1150.     undefined,        0,        /* ede1 */
  1151.     undefined,        0,        /* ede2 */
  1152.     undefined,        0,        /* ede3 */
  1153.     undefined,        0,        /* ede4 */
  1154.     undefined,        0,        /* ede5 */
  1155.     undefined,        0,        /* ede6 */
  1156.     undefined,        0,        /* ede7 */
  1157.  
  1158.     undefined,        0,        /* ede8 */
  1159.     undefined,        0,        /* ede9 */
  1160.     undefined,        0,        /* edea */
  1161.     undefined,        0,        /* edeb */
  1162.     undefined,        0,        /* edec */
  1163.     undefined,        0,        /* eded */
  1164.     undefined,        0,        /* edee */
  1165.     undefined,        0,        /* edef */
  1166.  
  1167.     undefined,        0,        /* edf0 */
  1168.     undefined,        0,        /* edf1 */
  1169.     undefined,        0,        /* edf2 */
  1170.     undefined,        0,        /* edf3 */
  1171.     undefined,        0,        /* edf4 */
  1172.     undefined,        0,        /* edf5 */
  1173.     undefined,        0,        /* edf6 */
  1174.     undefined,        0,        /* edf7 */
  1175.  
  1176.     undefined,        0,        /* edf8 */
  1177.     undefined,        0,        /* edf9 */
  1178.     undefined,        0,        /* edfa */
  1179.     undefined,        0,        /* edfb */
  1180.     undefined,        0,        /* edfc */
  1181.     undefined,        0,        /* edfd */
  1182.     undefined,        0,        /* edfe */
  1183.     undefined,        0,        /* edff */
  1184.                             /* fd */
  1185.     undefined,        0,        /* fd00 */
  1186.     undefined,        0,        /* fd01 */
  1187.     undefined,        0,        /* fd02 */
  1188.     undefined,        0,        /* fd03 */
  1189.     undefined,        0,        /* fd04 */
  1190.     undefined,        0,        /* fd05 */
  1191.     undefined,        0,        /* fd06 */
  1192.     undefined,        0,        /* fd07 */
  1193.  
  1194.     undefined,        0,        /* fd08 */
  1195.     "add    iy,bc",        0,        /* fd09 */
  1196.     undefined,        0,        /* fd0a */
  1197.     undefined,        0,        /* fd0b */
  1198.     undefined,        0,        /* fd0c */
  1199.     undefined,        0,        /* fd0d */
  1200.     undefined,        0,        /* fd0e */
  1201.     undefined,        0,        /* fd0f */
  1202.  
  1203.     undefined,        0,        /* fd10 */
  1204.     undefined,        0,        /* fd11 */
  1205.     undefined,        0,        /* fd12 */
  1206.     undefined,        0,        /* fd13 */
  1207.     undefined,        0,        /* fd14 */
  1208.     undefined,        0,        /* fd15 */
  1209.     undefined,        0,        /* fd16 */
  1210.     undefined,        0,        /* fd17 */
  1211.  
  1212.     undefined,        0,        /* fd18 */
  1213.     "add    iy,de",        0,        /* fd19 */
  1214.     undefined,        0,        /* fd1a */
  1215.     undefined,        0,        /* fd1b */
  1216.     undefined,        0,        /* fd1c */
  1217.     undefined,        0,        /* fd1d */
  1218.     undefined,        0,        /* fd1e */
  1219.     undefined,        0,        /* fd1f */
  1220.  
  1221.     undefined,        0,        /* fd20 */
  1222.     "ld    iy,%02x%02xh",    2,        /* fd21 */
  1223.     "ld    (%02x%02xh),iy",2,        /* fd22 */
  1224.     "inc    iy",        0,        /* fd23 */
  1225.     undefined,        0,        /* fd24 */
  1226.     undefined,        0,        /* fd25 */
  1227.     undefined,        0,        /* fd26 */
  1228.     undefined,        0,        /* fd27 */
  1229.  
  1230.     undefined,        0,        /* fd28 */
  1231.     "add    iy,iy",        0,        /* fd29 */
  1232.     "ld    iy,(%02x%02xh)",2,        /* fd2a */
  1233.     "dec    iy",        0,        /* fd2b */
  1234.     undefined,        0,        /* fd2c */
  1235.     undefined,        0,        /* fd2d */
  1236.     undefined,        0,        /* fd2e */
  1237.     undefined,        0,        /* fd2f */
  1238.  
  1239.     undefined,        0,        /* fd30 */
  1240.     undefined,        0,        /* fd31 */
  1241.     undefined,        0,        /* fd32 */
  1242.     undefined,        0,        /* fd33 */
  1243.     "inc    (iy+%02xh)",    1,        /* fd34 */
  1244.     "dec    (iy+%02xh)",    1,        /* fd35 */
  1245.     "ld    (iy+%02xh),%02xh",2,        /* fd36 */
  1246.     undefined,        0,        /* fd37 */
  1247.  
  1248.     undefined,        0,        /* fd38 */
  1249.     "add    iy,sp",        0,        /* fd39 */
  1250.     undefined,        0,        /* fd3a */
  1251.     undefined,        0,        /* fd3b */
  1252.     undefined,        0,        /* fd3c */
  1253.     undefined,        0,        /* fd3d */
  1254.     undefined,        0,        /* fd3e */
  1255.     undefined,        0,        /* fd3f */
  1256.  
  1257.     undefined,        0,        /* fd40 */
  1258.     undefined,        0,        /* fd41 */
  1259.     undefined,        0,        /* fd42 */
  1260.     undefined,        0,        /* fd43 */
  1261.     undefined,        0,        /* fd44 */
  1262.     undefined,        0,        /* fd45 */
  1263.     "ld    b,(iy+%02xh)",    1,        /* fd46 */
  1264.     undefined,        0,        /* fd47 */
  1265.  
  1266.     undefined,        0,        /* fd48 */
  1267.     undefined,        0,        /* fd49 */
  1268.     undefined,        0,        /* fd4a */
  1269.     undefined,        0,        /* fd4b */
  1270.     undefined,        0,        /* fd4c */
  1271.     undefined,        0,        /* fd4d */
  1272.     "ld    c,(iy+%02xh)",    1,        /* fd4e */
  1273.     undefined,        0,        /* fd4f */
  1274.     
  1275.     undefined,        0,        /* fd50 */
  1276.     undefined,        0,        /* fd51 */
  1277.     undefined,        0,        /* fd52 */
  1278.     undefined,        0,        /* fd53 */
  1279.     undefined,        0,        /* fd54 */
  1280.     undefined,        0,        /* fd55 */
  1281.     "ld    d,(iy+%02xh)",    1,        /* fd56 */
  1282.     undefined,        0,        /* fd57 */
  1283.  
  1284.     undefined,        0,        /* fd58 */
  1285.     undefined,        0,        /* fd59 */
  1286.     undefined,        0,        /* fd5a */
  1287.     undefined,        0,        /* fd5b */
  1288.     undefined,        0,        /* fd5c */
  1289.     undefined,        0,        /* fd5d */
  1290.     "ld    e,(iy+%02xh)",    1,        /* fd5e */
  1291.     undefined,        0,        /* fd5f */
  1292.     
  1293.     undefined,        0,        /* fd60 */
  1294.     undefined,        0,        /* fd61 */
  1295.     undefined,        0,        /* fd62 */
  1296.     undefined,        0,        /* fd63 */
  1297.     undefined,        0,        /* fd64 */
  1298.     undefined,        0,        /* fd65 */
  1299.     "ld    h,(iy+%02xh)",    1,        /* fd66 */
  1300.     undefined,        0,        /* fd67 */
  1301.  
  1302.     undefined,        0,        /* fd68 */
  1303.     undefined,        0,        /* fd69 */
  1304.     undefined,        0,        /* fd6a */
  1305.     undefined,        0,        /* fd6b */
  1306.     undefined,        0,        /* fd6c */
  1307.     undefined,        0,        /* fd6d */
  1308.     "ld    l,(iy+%02xh)",    1,        /* fd6e */
  1309.     undefined,        0,        /* fd6f */
  1310.     
  1311.     "ld    (iy+%02xh),b",    1,        /* fd70 */
  1312.     "ld    (iy+%02xh),c",    1,        /* fd71 */
  1313.     "ld    (iy+%02xh),d",    1,        /* fd72 */
  1314.     "ld    (iy+%02xh),e",    1,        /* fd73 */
  1315.     "ld    (iy+%02xh),h",    1,        /* fd74 */
  1316.     "ld    (iy+%02xh),l",    1,        /* fd75 */
  1317.     undefined,        0,        /* fd76 */
  1318.     "ld    (iy+%02xh),a",    1,        /* fd77 */
  1319.  
  1320.     undefined,        0,        /* fd78 */
  1321.     undefined,        0,        /* fd79 */
  1322.     undefined,        0,        /* fd7a */
  1323.     undefined,        0,        /* fd7b */
  1324.     undefined,        0,        /* fd7c */
  1325.     undefined,        0,        /* fd7d */
  1326.     "ld    a,(iy+%02xh)",    1,        /* fd7e */
  1327.     undefined,        0,        /* fd7f */
  1328.  
  1329.     undefined,        0,        /* fd80 */
  1330.     undefined,        0,        /* fd81 */
  1331.     undefined,        0,        /* fd82 */
  1332.     undefined,        0,        /* fd83 */
  1333.     undefined,        0,        /* fd84 */
  1334.     undefined,        0,        /* fd85 */
  1335.     "add    a,(iy+%02xh)",    1,        /* fd86 */
  1336.     undefined,        0,        /* fd87 */
  1337.  
  1338.     undefined,        0,        /* fd88 */
  1339.     undefined,        0,        /* fd89 */
  1340.     undefined,        0,        /* fd8a */
  1341.     undefined,        0,        /* fd8b */
  1342.     undefined,        0,        /* fd8c */
  1343.     undefined,        0,        /* fd8d */
  1344.     "adc    a,(iy+%02xh)",    1,        /* fd8e */
  1345.     undefined,        0,        /* fd8f */
  1346.     
  1347.     undefined,        0,        /* fd90 */
  1348.     undefined,        0,        /* fd91 */
  1349.     undefined,        0,        /* fd92 */
  1350.     undefined,        0,        /* fd93 */
  1351.     undefined,        0,        /* fd94 */
  1352.     undefined,        0,        /* fd95 */
  1353.     "sub    (iy+%02xh)",    1,        /* fd96 */
  1354.     undefined,        0,        /* fd97 */
  1355.  
  1356.     undefined,        0,        /* fd98 */
  1357.     undefined,        0,        /* fd99 */
  1358.     undefined,        0,        /* fd9a */
  1359.     undefined,        0,        /* fd9b */
  1360.     undefined,        0,        /* fd9c */
  1361.     undefined,        0,        /* fd9d */
  1362.     "sbc    a,(iy+%02xh)",    1,        /* fd9e */
  1363.     undefined,        0,        /* fd9f */
  1364.     
  1365.     undefined,        0,        /* fda0 */
  1366.     undefined,        0,        /* fda1 */
  1367.     undefined,        0,        /* fda2 */
  1368.     undefined,        0,        /* fda3 */
  1369.     undefined,        0,        /* fda4 */
  1370.     undefined,        0,        /* fda5 */
  1371.     "and    (iy+%02xh)",    1,        /* fda6 */
  1372.     undefined,        0,        /* fda7 */
  1373.  
  1374.     undefined,        0,        /* fda8 */
  1375.     undefined,        0,        /* fda9 */
  1376.     undefined,        0,        /* fdaa */
  1377.     undefined,        0,        /* fdab */
  1378.     undefined,        0,        /* fdac */
  1379.     undefined,        0,        /* fdad */
  1380.     "xor    (iy+%02xh)",    1,        /* fdae */
  1381.     undefined,        0,        /* fdaf */
  1382.     
  1383.     undefined,        0,        /* fdb0 */
  1384.     undefined,        0,        /* fdb1 */
  1385.     undefined,        0,        /* fdb2 */
  1386.     undefined,        0,        /* fdb3 */
  1387.     undefined,        0,        /* fdb4 */
  1388.     undefined,        0,        /* fdb5 */
  1389.     "or    (iy+%02xh)",    1,        /* fdb6 */
  1390.     undefined,        0,        /* fdb7 */
  1391.  
  1392.     undefined,        0,        /* fdb8 */
  1393.     undefined,        0,        /* fdb9 */
  1394.     undefined,        0,        /* fdba */
  1395.     undefined,        0,        /* fdbb */
  1396.     undefined,        0,        /* fdbc */
  1397.     undefined,        0,        /* fdbd */
  1398.     "cp    (iy+%02xh)",    1,        /* fdbe */
  1399.     undefined,        0,        /* fdbf */
  1400.     
  1401.     undefined,        0,        /* fdc0 */
  1402.     undefined,        0,        /* fdc1 */
  1403.     undefined,        0,        /* fdc2 */
  1404.     undefined,        0,        /* fdc3 */
  1405.     undefined,        0,        /* fdc4 */
  1406.     undefined,        0,        /* fdc5 */
  1407.     undefined,        0,        /* fdc6 */
  1408.     undefined,        0,        /* fdc7 */
  1409.  
  1410.     undefined,        0,        /* fdc8 */
  1411.     undefined,        0,        /* fdc9 */
  1412.     undefined,        0,        /* fdca */
  1413.     "fd cb    %02x,%02x",    2,        /* fdcb */
  1414.     undefined,        0,        /* fdcc */
  1415.     undefined,        0,        /* fdcd */
  1416.     undefined,        0,        /* fdce */
  1417.     undefined,        0,        /* fdcf */
  1418.     
  1419.     undefined,        0,        /* fdd0 */
  1420.     undefined,        0,        /* fdd1 */
  1421.     undefined,        0,        /* fdd2 */
  1422.     undefined,        0,        /* fdd3 */
  1423.     undefined,        0,        /* fdd4 */
  1424.     undefined,        0,        /* fdd5 */
  1425.     undefined,        0,        /* fdd6 */
  1426.     undefined,        0,        /* fdd7 */
  1427.  
  1428.     undefined,        0,        /* fdd8 */
  1429.     undefined,        0,        /* fdd9 */
  1430.     undefined,        0,        /* fdda */
  1431.     undefined,        0,        /* fddb */
  1432.     undefined,        0,        /* fddc */
  1433.     undefined,        0,        /* fddd */
  1434.     undefined,        0,        /* fdde */
  1435.     undefined,        0,        /* fddf */
  1436.     
  1437.     undefined,        0,        /* fde0 */
  1438.     "pop    iy",        0,        /* fde1 */
  1439.     undefined,        0,        /* fde2 */
  1440.     "ex    (sp),iy",    0,        /* fde3 */
  1441.     undefined,        0,        /* fde4 */
  1442.     "push    iy",        0,        /* fde5 */
  1443.     undefined,        0,        /* fde6 */
  1444.     undefined,        0,        /* fde7 */
  1445.  
  1446.     undefined,        0,        /* fde8 */
  1447.     "jp    (iy)",        0,        /* fde9 */
  1448.     undefined,        0,        /* fdea */
  1449.     undefined,        0,        /* fdeb */
  1450.     undefined,        0,        /* fdec */
  1451.     undefined,        0,        /* fded */
  1452.     undefined,        0,        /* fdee */
  1453.     undefined,        0,        /* fdef */
  1454.     
  1455.     undefined,        0,        /* fdf0 */
  1456.     undefined,        0,        /* fdf1 */
  1457.     undefined,        0,        /* fdf2 */
  1458.     undefined,        0,        /* fdf3 */
  1459.     undefined,        0,        /* fdf4 */
  1460.     undefined,        0,        /* fdf5 */
  1461.     undefined,        0,        /* fdf6 */
  1462.     undefined,        0,        /* fdf7 */
  1463.  
  1464.     undefined,        0,        /* fdf8 */
  1465.     "ld    sp,iy",        0,        /* fdf9 */
  1466.     undefined,        0,        /* fdfa */
  1467.     undefined,        0,        /* fdfb */
  1468.     undefined,        0,        /* fdfc */
  1469.     undefined,        0,        /* fdfd */
  1470.     undefined,        0,        /* fdfe */
  1471.     undefined,        0,        /* fdff */
  1472. };
  1473.  
  1474. int    curaddr = 0;
  1475.  
  1476. main ()
  1477. {
  1478.     int    i, j, arg1, arg2;
  1479.     struct opcode    *code;
  1480.     int    addr;
  1481.  
  1482.     for (;;) {
  1483.         addr = curaddr;
  1484.         i = gethex();
  1485.         if (!major[i].name) {
  1486.             j = major[i].args;
  1487.             i = gethex();
  1488.             while (!minor[j][i].name) {
  1489.                 j = minor[j][i].args;
  1490.                 i = gethex ();
  1491.             }
  1492.             code = &minor[j][i];
  1493.         } else
  1494.             code = &major[i];
  1495.         printf ("%04x\t", addr);
  1496.         switch (code->args) {
  1497.         case 2:
  1498.             printf (code->name, gethex(), gethex());
  1499.             break;
  1500.         case 1:
  1501.             printf (code->name, gethex());
  1502.             break;
  1503.         case 0:
  1504.             printf (code->name);
  1505.             break;
  1506.         } 
  1507.         putchar ('\n');
  1508.     }
  1509. }
  1510.  
  1511. int    inline;
  1512. int    index;
  1513.  
  1514. char    linebuf[1024];
  1515.  
  1516. int    hexbuf[1024];
  1517.  
  1518. gethex ()
  1519. {
  1520.     if (index == inline) {
  1521.     again:    ;
  1522.         if (gets (linebuf) == 0)
  1523.             exit (0);
  1524.         if (strlen (linebuf) < 9)
  1525.             goto again;
  1526.         inline = fromhex (linebuf+1);
  1527.         for (index = 0; index < inline; index++)
  1528.             hexbuf[index] = fromhex (linebuf+9 + 2 * index);
  1529.         index = 0;
  1530.     }
  1531.     ++curaddr;
  1532.     return hexbuf[index++];
  1533. }
  1534.  
  1535. #define hexval(c)    (('0' <= (c) && (c) <= '9') ? (c) - '0' :\
  1536.             (('a' <= (c) && (c) <= 'f') ? (c) - 'a' + 10 :\
  1537.             (('A' <= (c) && (c) <= 'F') ? (c) - 'A' + 10 :\
  1538.                 -1 ))) 
  1539.  
  1540. fromhex (c)
  1541. char    *c;
  1542. {
  1543.     return hexval(c[0]) * 16 + hexval(c[1]);
  1544. }
  1545. SHAR_EOF
  1546. if test 37358 -ne "`wc -c < 'zdis.c'`"
  1547. then
  1548.     echo shar: error transmitting "'zdis.c'" '(should have been 37358 characters)'
  1549. fi
  1550. chmod +x 'zdis.c'
  1551. fi # end of overwriting check
  1552. echo shar: extracting "'serial.z'" '(19313 characters)'
  1553. if test -f 'serial.z'
  1554. then
  1555.     echo shar: will not over-write existing file "'serial.z'"
  1556. else
  1557. cat << \SHAR_EOF > 'serial.z'
  1558.  
  1559. ; SCCS flags:        serial.z    1.8    9/21/82
  1560.  
  1561.  
  1562. ;
  1563. ; This program is a quick and dirty controller program
  1564. ; for the simple Z80 serial interface card for the Red
  1565. ; display controller.
  1566. ;
  1567. ; It uses two 256 byte buffers to buffer data to and from the
  1568. ; host. This helps make up for the obnoxiously slow rs232.
  1569. ;
  1570. ; History:
  1571. ; jrp    3-18-82    v1.0 Initial version by John Providenza.
  1572. ;
  1573. ; jrp    3-22-82    v1.1 Added code to send a Xon (Cntrlq) at reset
  1574. ;        if the dip switch is set to Xon/Xoff mode.
  1575. ;
  1576. ; jrp    4-20-82    v1.2 Added SCCS flags as comment in header and
  1577. ;        as a "ascii" block after a reset jmp.
  1578. ;
  1579. ; jrp    4-20-82    v1.3 Changed crt modem flags to RLSD = Out Buf Full,
  1580. ;        RI = In Buf Full.
  1581. ;
  1582. ; jrp    4-21-82    v1.4 Added diagnostic code to test ram, switches, and
  1583. ;        uart.
  1584. ;
  1585. ; jrp    4-30-82    v1.5 Cleaned up some code, added some more comments.
  1586. ;
  1587. ; jrp    5-27-82    v1.6 Fixed bug that caused output buffer to overflow
  1588. ;        in Hex mode.
  1589. ;
  1590. ; jrp    6-22-82    v1.7 Added 'end of message' command in hex mode.
  1591. ;        This is active only in hex mode and only if a
  1592. ;        non 0 byte count is specified (0 is default)
  1593. ;        'l' is used to specify byte count, 'm' specifies
  1594. ;        the eom char. Both expect 2 hex digits following
  1595. ;        to specify the apropriate parameter.
  1596. ;
  1597. ; jrp    8-23-82    v1.8 Added code to allow send/recv in different modes.
  1598. ;        Thus the host can send in raw mode and receive in hex
  1599. ;        mode, allowing CntrlS/Q flow control.
  1600. ;        Also added 's' command in 'hex' mode to reset the SWTCH
  1601. ;        settings.
  1602. ;        Also added break detect to reset the mode/baud to the
  1603. ;        switch settings.
  1604. ;            switch    dIN    dOUT    Flow Control.
  1605. ;            7 6 5
  1606. ;            0 0 0    raw    raw    No flow control.
  1607. ;            0 0 1    raw    hex    Xon/Xoff sent to host.
  1608. ;            0 1 0    hex    raw    Xon/Xoff received from host.
  1609. ;            0 1 1    hex    hex    Full Xon/Xoff.
  1610. ;            1 0 0    raw    raw    Full modem flow control.
  1611. ;            1 0 1    raw    hex    Full modem flow control.
  1612. ;            1 1 0    hex    raw    Full modem flow control.
  1613. ;            1 1 1    hex    hex    Full modem flow control.
  1614. ;
  1615. ; SCCS flags:    serial.z 1.8 9/21/82
  1616.     eject    1
  1617. ; Serial port equates.
  1618. Serial    equ    00H    ; base address of 8250 controller.
  1619. Ier    equ    01H    ; Interrupt Enable Reg
  1620. Iir    equ    02H    ; Interrupt Ident Reg
  1621. Lcr    equ    03H    ; Line Control Reg
  1622. Mcr    equ    04H    ; Modem Control Reg
  1623. Lsr    equ    05H    ; Line Status Reg
  1624. Msr    equ    06H    ; Modem Status Reg
  1625.  
  1626. ; These equates define bits in the Msr.
  1627. DsrIn    equ    05    ; Data Set Ready input
  1628. CtsIn    equ    04    ; Clear to Send input
  1629. InMt    equ    06    ; No data from display controller = 1 (Ring In)
  1630. OutMt    equ    07    ; Crt ready for next byte = 1 (Rcvd Line Signal Detct)
  1631.  
  1632. ; These equates define bits in the Lsr
  1633. DataRdy    equ    00    ; Input data ready.
  1634. Break    equ    04    ; Break condition.
  1635. XmitMt    equ    05    ; Xmitter buffer empty.
  1636.  
  1637. ; These equates define bits in the Mcr
  1638. DtrOut    equ    00    ; Data terminal ready output.
  1639. RtsOut    equ    01    ; Request to send output.
  1640.  
  1641. ; Misc definitions.
  1642. Crt    equ    80H    ; Parallel port to display controller.
  1643. Baud    equ    40H    ; Switches port.
  1644. Stack    equ    0FFFFH
  1645.  
  1646. ; Mailbox equates.
  1647. Head    equ    0
  1648. Tail    equ    1
  1649. Count    equ    2
  1650. Base    equ    3
  1651. Status    equ    4
  1652. UnChar    equ    5    ; Should be used only for CntrlS and CntrlQ
  1653.  
  1654. ; Equates for the Queue status byte
  1655. XmitOff    equ    00        ; xmitter is disabled.
  1656.  
  1657. ; Baud/Switch equates.
  1658. Bmask    equ    0FH
  1659. Rawout    equ    020H
  1660. RObit    equ    5
  1661. Rawin    equ    040H
  1662. RIbit    equ    6
  1663. Xon    equ    080H
  1664. Xonbit    equ    7
  1665.  
  1666. ; Some ASCII character equates.
  1667. CntrlS    equ    19        ; Xoff
  1668. CntrlQ    equ    17        ; Xon
  1669. Cr    equ    13        ; Carriage return.
  1670.     eject    1
  1671.     ORG    0FC00H
  1672. RAM_START:
  1673. ; Variable declarations
  1674. ; Ram is in the top 1K of memory.
  1675.  
  1676. ; Queues.
  1677. ; These are the actual data buffers. The only routine that should use
  1678. ; these labels re INIT_V to set the mailbox data pointers up.
  1679. ; All I/O is via GETQ and PUTQ routines.
  1680. INBUF:    block    256        ; input buffer q.
  1681. OUTBUF:    block    256        ; output buffer q.
  1682.  
  1683. UNUSED:    block    256        ; unused ram
  1684.  
  1685. ; Now the ram for variables and stack.
  1686.  
  1687. SWTCH:    block    1        ; Current baud/switches
  1688.  
  1689. ; Variable for the H_to_Q routine
  1690. ; It holds the upper nibble of hex until the lower one arrives.
  1691. ; Bit 0 = 1 for empty, 0 for upper nibble full.
  1692. H_to_QV:    block    1
  1693.  
  1694. ; End of message variables.
  1695. MESS_LEN:    block    1    ; How long messages are.
  1696. MESS_CNT:    block    1    ; Number of chars in current message.
  1697. EOM_CHAR:    block    1    ; The end of message char.
  1698.  
  1699.  
  1700. ; In and Out queues variables.
  1701. INBOX:    block    6
  1702. OUTBOX:    block    6
  1703.     eject    1
  1704. ; Mainline loop.
  1705.     ORG    0
  1706.     JP    RESET        ; Jmp to the code
  1707.                 ; Put in ID string
  1708.     ascii    'serial.z 1.8'
  1709. RESET:
  1710.     LD    SP, Stack
  1711.     CALL    CHECK        ; Check the hardware out.
  1712.     CALL    INIT_HW        ; Init the hardware devices.
  1713.     CALL    INIT_V        ; Init the variables.
  1714.  
  1715.     LD    IX,OUTBOX    ; Point to the outbox.
  1716.     LD    A,(SWTCH)    ; Check if we're in Xon/Xoff mode.
  1717.     AND    Xon
  1718.     LD    A,Cntrlq    ; Send a Xon to host if we're in that mode
  1719.     CALL    NZ,PUTQ
  1720.  
  1721. ; Now loop checking for data available from host or display controller.
  1722. ; Also check if we can send data to them.
  1723. LOOP:
  1724.     IN    A,(Lsr)        ; Get the line status.
  1725.     LD    C,A
  1726.     IN    A,(Msr)        ; Get the modem status.
  1727.     LD    B,A        ; and save it
  1728.                 ; B = Msr, C = Lsr.
  1729. ; Check for break condition.
  1730.     BIT    Break,C        ; test the bit in the Lsr
  1731.     JR    Z,LOOP1
  1732.     CALL    SETBAUD        ; reset the SWTCH variable.
  1733.     CALL    INIT_V        ; reset all the variables
  1734.     JR    LOOP
  1735. LOOP1:
  1736.     CALL    HOST_IN
  1737.     CALL    DISP_IN
  1738.     CALL    DISP_OUT
  1739.     CALL    HOST_OUT
  1740.     JR    LOOP
  1741.     eject    1
  1742. ; Check if data is ready from host.
  1743. HOST_IN:
  1744.     BIT    DataRdy,C    ; Data ready?
  1745.     RET    Z        ; Ret if no.
  1746.                 ; Handle a byte from the Host.
  1747.     LD    IX,INBOX    ; data will go into the Input Q.
  1748.     LD    A,(SWTCH)    ; check for Raw or encoded mode.
  1749.     LD    H,A
  1750.     AND    Rawin        ; NZ for Raw mode
  1751.     IN    A,(Serial)    ; get the data byte.
  1752.     JR    Z,HEX_IN    ; Jmp if hex data in.
  1753. RAW_IN:                ; Process Raw data
  1754.     CALL    PUTQ
  1755.     JP    STOP_IN        ; stop the input if needed.
  1756. HEX_IN:
  1757.     AND    7FH        ; Kill any parity bit.
  1758.     CP    ' '        ; Printable ASCII?
  1759.     JR    NC,PRINT    ; Jmp if yes
  1760. ; Control character.
  1761.     CP    Cr        ; Carriage Ret?
  1762.     JR    NZ,IN_FLOW    ; Jp if no.
  1763.     LD    A,1        ; Set the H_to_Q variable to empty.
  1764.     LD    (H_to_QV),A    ; This flushes any partially assembled byte.
  1765.     RET            ; Done
  1766. ; Test for Xon/Xoff commands.
  1767. IN_FLOW:
  1768.     BIT    Xonbit,H    ; Are we sensitive to them?
  1769.     RET    Z        ; Ret if no.
  1770.     LD    HL,OUTBOX+Status    ; Get a pointer to our outbox status.
  1771.     CP    CntrlS        ; Xoff our transmitter?
  1772.     JR    NZ,NOT_XOFF    ; Jmp if no.
  1773. OFF:
  1774.     SET    XmitOff,(HL)
  1775.     RET
  1776. NOT_XOFF:
  1777.     CP    CntrlQ        ; Xon our xmitter?
  1778.     RET    NZ        ; ret if no.
  1779. ON:
  1780.     RES    XmitOff,(HL)
  1781.     RET
  1782. ; Printable char received from host.
  1783. PRINT:                ; Printable character received in hex mode.
  1784.     SET    5,A        ; Convert to lower case.
  1785.     CP    'l'        ; Message length command?
  1786.     JR    NZ,PRINT1    ; Jmp if no.
  1787.     CALL    GET_HEX        ; Get byte from UART
  1788.     LD    (MESS_LEN),A    ; Set the message length.
  1789.     LD    (MESS_CNT),A    ; Reset the number of chars sent so far.
  1790.     RET
  1791. PRINT1:
  1792.     CP    'm'        ; EOM char set command?
  1793.     JR    NZ,PRINT2
  1794.     CALL    GET_HEX        ; Get byte from UART
  1795.     LD    (EOM_CHAR),A
  1796.     RET
  1797. PRINT2:
  1798.     CP    's'        ; change SWTCH command?
  1799.     JR    NZ,PRINT3
  1800.     CALL    GET_HEX        ; Get byte from UART
  1801.     CPL            ; Toggle them.
  1802.     LD    (SWTCH),A
  1803.     RET
  1804. PRINT3:
  1805.     CALL    H_to_Q        ; Pack the encoded data into bytes.
  1806.     JP    STOP_IN        ; stop the input if needed.
  1807.     eject    1
  1808. ; Data ready from controller?
  1809. DISP_IN:
  1810.     BIT    InMt,B        ; data from controller?
  1811.     RET    NZ        ; ret if no.
  1812.     LD    IX,OUTBOX
  1813.     LD    A,(IX+Count)    ; Get the Q count.
  1814.     ADD    A,3        ; Check if Q has room for 3 more bytes.
  1815.     RET    C        ; ret if no
  1816.     LD    A,(SWTCH)    ; check if we need to encode the data.
  1817.     AND    Rawout
  1818.     IN    A,(Crt)        ; get the data from the crt.
  1819.     JP    NZ,PUTQ        ; send the raw data and return.
  1820. ; hex data out to host.
  1821.     CALL    B_to_H        ; convert byte to hex format and stick in Q.
  1822.                 ; Check if we need to stick an EOM char in.
  1823.     LD    A,(MESS_LEN)    ; Get the length.
  1824.     AND    A
  1825.     RET    Z        ; Zero means no EOM character to be sent.
  1826.     LD    HL,MESS_CNT    ; Point to the counter.
  1827.     DEC    (HL)        ; Time to send a EOM char?
  1828.     RET    NZ        ; Ret if no.
  1829.     LD    (HL),A        ; reset the length.
  1830.     LD    A,(EOM_CHAR)    ; Get the char and stick it in the Q.
  1831.     JP    PUTQ        ; and return when done
  1832.     eject    1
  1833. ; Controller ready for data?
  1834. DISP_OUT:
  1835.     BIT    OutMt,B        ; controller ready for data?
  1836.     RET    Z        ; Jmp if no
  1837.     LD    IX,INBOX
  1838.     CALL    GETQ        ; get a byte for controller.
  1839.     RET    C        ; ret if no byte available.
  1840.     OUT    (Crt),A        ; send char to display.
  1841.     JP    STRT_IN        ; re-enable host xmitter if needed.
  1842.     eject    1
  1843. ; Host ready for data?
  1844. HOST_OUT:
  1845.     BIT    XmitMt,C    ; Uart xmitter empty?
  1846.     RET    Z        ; ret if no.
  1847.     LD    IX,OUTBOX    ; Get OutBox pointer.
  1848.     LD    A,(SWTCH)    ; Check for Xon mode
  1849.     AND    Xon
  1850.     JR    NZ,H_O_Xon    ; Jp if Xon mode.
  1851.     BIT    CtsIn,B        ; Clear to send?
  1852.     RET    Z        ; ret if no.
  1853.     JR    H_O_Send    ; We are clear to send.
  1854. H_O_Xon:
  1855.     LD    A,(OUTBOX+UnChar)
  1856.     AND    A
  1857.     JR    NZ,H_O_Send    ; Always send an 'UnChar'
  1858.     BIT    XmitOff,(IX+Status)
  1859.     RET    NZ        ; ret if xmitter is disabled.
  1860. H_O_Send:
  1861.     CALL    GETQ
  1862.     RET    C        ; Ret if no character available.
  1863.     OUT    (Serial),A
  1864.     RET
  1865.     eject    1
  1866. ; Check the hardware out.
  1867. ; Call this routine only after a external reset!!!!
  1868.  
  1869. CHECK:
  1870. ; Check the baud switch (really crude).
  1871.     IN    A,(BAUD)    ; Get the baud switch.
  1872.     LD    B,A        ; Save it.
  1873.     IN    A,(BAUD)
  1874.     CP    B        ; Same as last time?
  1875. BAD_B:    ; Switch ERROR - Can't read switches twice in a row.
  1876.     JR    NZ,BAD_B    ; Loop if no.
  1877. ; Check the ram.
  1878. ; Write the complement of the low byte of address out to all ram,
  1879. ; then check if it stayed the same.
  1880. ; Note that this destroys all ram contents.
  1881.     POP    DE        ; Save the return address in a register.
  1882.     LD    HL,RAM_START    ; Get the first address of ram.
  1883.     LD    B, NOT [RAM_START & 0FFH]
  1884.     LD    C,B        ; Get complement of low address byte.
  1885.                 ; Load the ram with the pattern.
  1886. RAM1:
  1887.     LD    (HL),B
  1888.     DEC    B
  1889.     INC    HL
  1890.     LD    A,H        ; Test for done.
  1891.     OR    L
  1892.     JR    NZ,RAM1        ; Loop till all locations written.
  1893.     LD    HL,RAM_START    ; Get the first address of ram.
  1894. ; Check if ram agrees with what should be there.
  1895. RAM2:
  1896.     LD    A,(HL)        ; Get the byte.
  1897.     XOR    C        ; Same as its low address byte?
  1898.     JR    Z,RAM6        ; Jmp if yes.
  1899. ; Ram error. We have three loops: low bad, high bad, both bad.
  1900.     LD    B,A        ; Save the symptom.
  1901.     AND    0FH        ; Low nibble bad?
  1902. RAM3:    ; Ram ERROR - bad high nibble.
  1903.     JR    Z,RAM3        ; Jmp if no.
  1904.     LD    A,B        ; get the symptom back.
  1905.     AND    0F0H        ; High nibble bad too?
  1906. RAM4:    ; Ram ERROR - bad low nibble.
  1907.     JR    Z,RAM4        ; Loop if error.
  1908. RAM5:    ; Ram ERROR - both nibbles bad.
  1909.     JR    RAM5
  1910. RAM6:
  1911.     DEC    C
  1912.     INC    HL
  1913.     LD    A,H        ; Done?
  1914.     OR    L
  1915.     JR    NZ,RAM2        ; Jmp if no.
  1916.     PUSH    DE        ; Fix the stack back up.
  1917. ; Check out the National Semi INS8250 Uart.
  1918. ; Since we were reset, Lcr should be zero.
  1919.     IN    A,(Lcr)        ; Get the Line Control reg
  1920.     AND    A
  1921. U0:    ; Uart ERROR - Lcr not reset properly.
  1922.     JR    NZ,U0        ; Loop if error.
  1923.     LD    A,80H
  1924.     OUT    (Lcr),A        ; And set the Divisor access bit.
  1925.     IN    A,(Lcr)        ; Check that it got set.
  1926.     CP    80H        ; Still set?
  1927. U1:    ; Uart ERROR - Lcr won't hold divisor access bit.
  1928.     JR    NZ,U1        ; Loop if error.
  1929.     LD    A,3        ; Try to set 38.4K baud
  1930.     OUT    (Serial),A    ; Ld the divisor.
  1931.     IN    A,(Serial)    ; Test that it loaded OK.
  1932.     SUB    3        ; Check if same (also set A to zero)
  1933. U2:    ; Uart ERROR - unexpected low divisor.
  1934.     JR    NZ,U2        ; Loop if error.
  1935.     OUT    (Ier),A        ; Set high byte to zero
  1936.     IN    A,(Ier)
  1937.     AND    A        ; Still zero?
  1938. U3:    ; Uart ERROR - unexpected high divisor.
  1939.     JR    NZ,U3        ; Loop if no (ie, error).
  1940.     IN    A,(Lcr)        ; Get the Line reg back.
  1941.     SUB    80H        ; Is it the same as before?
  1942. U4:    ; Uart ERROR - unexpected Lcr value after setting divisor.
  1943.     JR    NZ,U4        ; loop if error.
  1944.     OUT    (Lcr),A        ; Turn off divisor access bit.
  1945.     IN    A,(Lcr)        ; Check it.
  1946.     AND    A
  1947. U5:    ; Uart ERROR - Lcr won't reset after setting divisor.
  1948.     JR    NZ,U5
  1949.     LD    A,7
  1950.     OUT    (Lcr),A        ; 8 bits, no parity, 2 stop bits
  1951.     IN    A,(Lcr)
  1952.     SUB    7        ; Test if the same (also set A to zero)
  1953. U6:    ; Uart ERROR - Can't set proper operating Lcr.
  1954.     JR    NZ,U6        ; If we succeed, assume Lcr is Ok.
  1955.     OUT    (Ier),A        ; Disable all 8250 interrupt conditions (set to 0).
  1956.     IN    A,(Ier)
  1957.     AND    A
  1958. U7:    ; Uart ERROR - Can't reset Ier.
  1959.     JR    NZ,U7
  1960.     RET
  1961.     eject    1
  1962. ; Init the hardware.
  1963. INIT_HW:
  1964.     CALL    SETBAUD        ; Set the Uart baud
  1965.     LD    A,7
  1966.     OUT    (Lcr),A        ; 8 bits, no parity, 2 stop bits
  1967.     XOR    A        ; Disable all 8250 interrupt conditions.
  1968.     OUT    (Ier),A
  1969.     LD    A,3        ; Dtr, Rts on.
  1970.     OUT    (Mcr),A
  1971.  
  1972. ; Perform the I/O diagnostic with the controller.
  1973. ; Wait for data from controller, then echo it back.
  1974. INITH1:
  1975.     IN    A,(Msr)        ; Check if controller data ready.
  1976.     BIT    InMt,A        ; Ready?
  1977.     JR    NZ,INITH1    ; Jmp if no.
  1978.     IN    A,(Crt)        ; Get the data.
  1979.     OUT    (Crt),A        ; And send it back to controller.
  1980.     RET
  1981.  
  1982.  
  1983. ; Init the variables.
  1984. INIT_V:
  1985.     XOR    A        ; zero A
  1986.  
  1987. ; Init the Q's
  1988.     LD    IX,INBOX    ; Init the inbox.
  1989.     LD    (IX + Head),A
  1990.     LD    (IX + Tail),A
  1991.     LD    (IX + Count),A
  1992.     LD    HL,INBUF
  1993.     LD    (IX + Base),H
  1994.     LD    (IX + Status),A
  1995.     LD    (IX + UnChar),A
  1996.  
  1997.     LD    IX,OUTBOX    ; Init the outbox.
  1998.     LD    (IX + Head),A
  1999.     LD    (IX + Tail),A
  2000.     LD    (IX + Count),A
  2001.     LD    HL,OUTBUF
  2002.     LD    (IX + Base),H
  2003.     LD    (IX + Status),A
  2004.     LD    (IX + UnChar),A
  2005.  
  2006. ; Init the H_to_Q variable.
  2007.     LD    A,1
  2008.     LD    (H_to_QV),A
  2009.  
  2010. ; init the 'end of message' stuff
  2011.     LD    A,Cr        ; default r is a carriage return.
  2012.     LD    (EOM_CHAR),A
  2013.     XOR    A
  2014.     LD    (MESS_LEN),A
  2015.     LD    (MESS_CNT),A
  2016.     RET
  2017.     eject    1
  2018. ; These routines handle the input and output queues.
  2019. ; The Q pointer is passed in IX, result/source in A.
  2020. ; Queues must be 256 bytes long. We use only 8 bit
  2021. ; arithmetic for Q manipulation.
  2022. ; A Q is defined as 6 bytes of status:
  2023. ;    Tail    Offset for getting next char
  2024. ;    Head    Offset for putting next char
  2025. ;    Count    Number of chars in q
  2026. ;    Base    High byte of the q origin
  2027. ;    Status    Status of Q
  2028. ;    UnChar    The 'un_get' char if non-zero
  2029. ; and 256 bytes of storage.
  2030. ;
  2031.  
  2032. GETQ:
  2033. ; Get an element from the Q.
  2034. ; entry    ix = Q pointer
  2035. ; exit    a  = result
  2036. ;    ca = set for empty Q, cleared for full Q.
  2037. ;    bc & de are unchanged.
  2038. ;    hl = garbage
  2039. ;
  2040.     LD    A,(IX + UnChar) ; Get the unget char
  2041.     LD    (IX + UnChar),0    ; Set the byte to 0 (empty).
  2042.     AND    A
  2043.     RET    NZ        ; Ret if we got an unget char.
  2044.                 ; A == 0 here.
  2045.     CP    (IX + Count)    ; Get the q count
  2046.     SCF
  2047.     RET    Z        ; empty Q return (Count == 0).
  2048.     DEC    (IX + Count)    ; one less item in the Q.
  2049.     LD    L,(IX + Tail)    ; get a pointer to the element in the Q.
  2050.     LD    H,(IX + Base)
  2051.     INC    (IX + Tail)    ; bump the pointer to the next char.
  2052.     OR    (HL)        ; Get the element, and clear the carry.
  2053.     RET
  2054.  
  2055.  
  2056. PUTQ:
  2057. ; Routine to put a char in a Q.
  2058. ;entry    ix = pointer to Q structure.
  2059. ;    a = char to put.
  2060. ;exit    hl = garbage
  2061. ;    a, bc & de unchanged.
  2062. ;    Ca = 1 for Q full, character discarded.
  2063. ;
  2064.     INC    (IX + Count)    ; Bump the Q count.
  2065. QPUT_ERR:
  2066.     JR    Z,QPUT_ERR
  2067. QPUT1:
  2068.     LD    H,(IX + Base)
  2069.     LD    L,(IX + Head)
  2070.     LD    (HL),A        ; Put the char in the Q
  2071.     INC    (IX + Head)
  2072.     AND    A        ; Clear the carry bit
  2073.     RET
  2074.     eject    1
  2075. ; These routines pack and unpack bytes into Hex
  2076. ; suitable for sending as ASCII over a serial line.
  2077. ; H_to_Q takes Hex characters
  2078. ; and packs them into 8 bit bytes to send to the display.
  2079. ; B_to_H takes bytes from the display and converts them into
  2080. ; the Hex character stream.
  2081. ;
  2082. ; Both routines use Q calls. IX must be set up with the proper
  2083. ; Q address.
  2084. ;
  2085. ;
  2086.  
  2087.  
  2088.  
  2089. H_to_Q:
  2090. ;
  2091. ; entry    A    = Ascii Hex char (0-9, a-f)
  2092. ;    IX    = Q pointer
  2093. ; exit    A, Hl    = Garbage
  2094. ;    bc, de    = unchanged.
  2095. ;    Ca    = 1 if Q too full.
  2096. ;
  2097.     CALL    H_to_B        ; convert the character to binary.
  2098.     LD    HL,H_to_QV    ; Point hl to our variable
  2099.     BIT    0,(HL)        ; check if the upper nibble is full.
  2100.     JR    Z,H_SEND    ; Jmp if yes.
  2101.     ADD    A,A        ; Move the nibble to the high 4 bits.
  2102.     ADD    A,A
  2103.     ADD    A,A
  2104.     ADD    A,A
  2105.     LD    (HL),A        ; Save away the high nibble with low nibble = 0.
  2106.     RET
  2107. H_SEND:
  2108.     OR    (HL)        ; Merge in the upper nibble from ram.
  2109.     LD    (HL),1        ; Set the variable to empty.
  2110.     JP    PUTQ        ; Send the byte and return.
  2111.     eject    1
  2112.  
  2113.  
  2114.  
  2115. B_to_H:
  2116. ; B_to_H takes the byte in A and splits it into two hex characters
  2117. ; to be sent to the Q specified in IX.
  2118. ;
  2119. ; Entry    A    = byte of data to convert to Hex.
  2120. ;    IX    = Q address.
  2121. ; Exit    A E Hl    = garbage
  2122. ;    D Bc Ix    = unchanged.
  2123. ;
  2124.  
  2125.     LD    E,A        ; Save the byte
  2126.     RRA            ; Move the upper nibble to low nibble.
  2127.     RRA
  2128.     RRA
  2129.     RRA
  2130.     AND    0Fh        ; Get only the upper nibble.
  2131.     CP    10        ; 0 thru 9?
  2132.     JR    C,B_to_H1    ; Jmp if yes.
  2133.     ADD    A,'A'-'0'-10
  2134. B_to_H1:
  2135.     ADD    A,'0'
  2136.     CALL    PUTQ
  2137.     LD    A,E        ; Get the byte back
  2138.     AND    0Fh        ; Mask for only low nibble.
  2139.     CP    10        ; 0 thru 9?
  2140.     JR    C,B_to_H2    ; Jmp if yes.
  2141.     ADD    A,'A'-'0'-10
  2142. B_to_H2:
  2143.     ADD    A,'0'
  2144.     JP    PUTQ        ; Send and return.
  2145.     eject    1
  2146. GET_HEX:
  2147. ; This routine gets two hex characters from the UART and
  2148. ; munches them into a byte in A.
  2149. ; Entry:    No Params.
  2150. ; Exit:     A=byte    H = trash
  2151. ;        all others unchanged (except for flags)
  2152.     IN    A,(Lsr)        ; Get the line status
  2153.     BIT    DataRdy,A    ; Data ready from host?
  2154.     JR    Z,GET_HEX    ; Jmp if no.
  2155.     IN    A,(Serial)    ; get the data.
  2156.     CALL    H_to_B        ; convert to binary.
  2157.     ADD    A,A        ; Shift up 4 bits
  2158.     ADD    A,A
  2159.     ADD    A,A
  2160.     ADD    A,A
  2161.     LD    H,A        ; Save in B
  2162. GET_HX1:
  2163.     IN    A,(Lsr)        ; Get the line status
  2164.     BIT    DataRdy,A    ; Data ready from host?
  2165.     JR    Z,GET_HX1    ; Jmp if no.
  2166.     IN    A,(Serial)    ; get the data.
  2167.     CALL    H_to_B        ; convert to binary.
  2168.     OR    H
  2169.     RET            ; A = 2 input chars munched together.
  2170.  
  2171. ; Convert hex char to binary.
  2172. H_to_B:
  2173.     SET    5,A        ; convert to lower case.
  2174.     SUB    '0'        ; less than 0?
  2175.     JR    C,HB_ERR    ; Jmp if out of bounds.
  2176.     CP    10        ; bigger than 9?
  2177.     RET    C        ; Ret if no (0..9)
  2178.     SUB    'a'-'0'-10    ; try to make it range 10-15
  2179.     CP    10
  2180.     JR    C,HB_ERR    ; Jmp if out of bounds.
  2181.     CP    16
  2182.     RET    C        ; Ret if hex.
  2183. HB_ERR:
  2184.     XOR    A        ; Set to zero.
  2185.     RET
  2186.  
  2187.     eject    1
  2188. SETBAUD:
  2189. ; This routine reads the BAUD switches and looks the code
  2190. ; up in the BTABLE to set the baudrate of the 8250 serial chip.
  2191. ;
  2192. ; Entry    No parameters
  2193. ; exit    A Hl De    = garbage.
  2194.     IN    A,(Lcr)    ; Set the divisor access bit on
  2195.     OR    80H
  2196.     OUT    (Lcr),A
  2197.     IN    A,(Baud)    ; Get the baud rate code
  2198.     LD    (SWTCH),A
  2199.     AND    Bmask        ; Get only the baud specifier bits.
  2200.     ADD    A,A        ; Double it to index into table.
  2201.     LD    HL,BTABLE    ; Index into table to get the divisor
  2202.     LD    E,A
  2203.     LD    D,0
  2204.     ADD    HL,DE
  2205.     LD    A,(HL)        ; Get the low order divisor byte
  2206.     OUT    (Serial),A
  2207.     INC    HL
  2208.     LD    A,(HL)        ; Get the high divisor byte
  2209.     OUT    (Serial+1),A
  2210.     IN    A,(Lcr)    ; Set the divisor access bit off
  2211.     AND    7FH
  2212.     OUT    (Lcr),A
  2213.     RET
  2214.  
  2215. ; Baud rate look up table
  2216. ; Only allow 16 entries.
  2217. BTABLE:
  2218.     WORD    5    ; 38.4 Kbaud
  2219.     WORD    10    ; 19.2
  2220.     WORD    20    ; 9600
  2221.     WORD    27    ; 7200
  2222.     WORD    40    ; 4800
  2223.     WORD    53    ; 3600
  2224.     WORD    80    ; 2400
  2225.     WORD    107    ; 1800
  2226.     WORD    160    ; 1200
  2227.     WORD    320    ; 600
  2228.     WORD    640    ; 300
  2229.     WORD    1280    ; 150
  2230.     WORD    1428    ; 134.5
  2231.     WORD    1745    ; 110
  2232.     WORD    2560    ; 75
  2233.     WORD    3840    ; 50
  2234.     eject    1
  2235. ; STRT_IN and STOP_IN are called when the Input Q is may be too full/empty.
  2236. ; They check and enable/disable the host xmitter apropriately.
  2237. ;
  2238.  
  2239. STRT_IN:
  2240. ; Entry    No registers set.
  2241. ; Exit    A Ix Hl    = garbage.
  2242. ;    Bc De    = unchanged.
  2243. ;
  2244.     LD    IX,INBOX    ; Point to the Q.
  2245.     BIT    XmitOff,(IX + Status)    ; Is it off?
  2246.     RET    Z        ; ret if no.
  2247.     LD    A,40        ; Check if we've gone below low water mark.
  2248.     CP    (IX + Count)
  2249.     RET    C        ; Ret if no, Q still too full.
  2250.     LD    A,(SWTCH)    ; get the switch settings.
  2251.     BIT    Xonbit,A
  2252.     JR    Z,STRT_DTR    ; Jmp if rs232 modem mode flow control.
  2253. ; Try to use Xon/Xoff control flow methods.
  2254.     BIT    RObit,A        ; Raw Output mode?
  2255.     RET    NZ        ; No way to start/stop host xmitter.
  2256.     LD    HL,OUTBOX+UnChar
  2257.     LD    A,(HL)        ; Anything in unget spot?
  2258.     AND    A
  2259.     RET    NZ        ; Ret if yes.
  2260.     LD    (HL),CntrlQ    ; 'unget' a control Q.
  2261.     JR    STRT_END
  2262. ; Set DTR bit on.
  2263. STRT_DTR:
  2264.     IN    A,(Mcr)        ; get the modem controls.
  2265.     SET    DtrOut,A
  2266.     OUT    (Mcr),A
  2267. STRT_END:
  2268.     RES    XmitOff,(IX + Status)    ; Mark as enabled.
  2269.     RET
  2270.  
  2271.  
  2272. STOP_IN:
  2273. ; Entry    No registers set.
  2274. ; Exit    A Ix Hl    = garbage.
  2275. ;    Bc De    = unchanged.
  2276. ;
  2277.     LD    IX,INBOX    ; Point to the Q.
  2278.     BIT    XmitOff,(IX + Status)    ; Already disabled?
  2279.     RET    NZ        ; ret if yes.
  2280.     LD    A,256-40    ; Check if we've gone above high water mark.
  2281.     CP    (IX + Count)
  2282.     RET    NC        ; Ret if no, Q still too empty.
  2283.     LD    A,(SWTCH)
  2284.     BIT    Xonbit,A    ; test for Xon/Xoff vs. modem flow cntrl.
  2285.     JR    Z,STP_DTR    ; jmp if rs232 modem mode
  2286. ; try to send an Xoff to the host.
  2287.     BIT    RObit,A        ; Are we in raw out?
  2288.     RET    NZ        ; Can't control the host xmitter.
  2289.     LD    HL,OUTBOX+UnChar
  2290.     LD    A,(HL)        ; Anything in unget spot?
  2291.     AND    A
  2292.     RET    NZ        ; Ret if yes.
  2293.     LD    (HL),CntrlS    ; 'unget' a control S.
  2294.     JR    STP_END
  2295. ; Modem mode flow control, set DTR bit off.
  2296. STP_DTR:
  2297.     IN    A,(Mcr)        ; get the modem controls.
  2298.     RES    DtrOut,A
  2299.     OUT    (Mcr),A
  2300. STP_END:
  2301.     SET    XmitOff,(IX + Status)    ; Mark as disabled.
  2302.     RET
  2303.  
  2304.     END
  2305. SHAR_EOF
  2306. if test 19313 -ne "`wc -c < 'serial.z'`"
  2307. then
  2308.     echo shar: error transmitting "'serial.z'" '(should have been 19313 characters)'
  2309. fi
  2310. chmod +x 'serial.z'
  2311. fi # end of overwriting check
  2312. echo shar: extracting "'serial.hex'" '(2168 characters)'
  2313. if test -f 'serial.hex'
  2314. then
  2315.     echo shar: will not over-write existing file "'serial.hex'"
  2316. else
  2317. cat << \SHAR_EOF > 'serial.hex'
  2318. :10000000C30F0073657269616C2E7A20312E38310E
  2319. :10001000FFFFCD1001CD7F01CD9801DD210BFF3A0F
  2320. :1000200000FFE6803E11C4F901DB054FDB0647CB3C
  2321. :10003000612808CD7102CD980118EECD4900CDB0F0
  2322. :1000400000CDDB00CDEB0018E0CB41C8DD2105FF82
  2323. :100050003A00FF67E640DB002806CDF901C3E20263
  2324. :10006000E67FFE20301DFE0D20063E013201FFC955
  2325. :10007000CB7CC8210FFFFE132003CBC6C9FE11C0E5
  2326. :10008000CB86C9CBEFFE6C200ACD40023202FF3294
  2327. :1000900003FFC9FE6D2007CD40023204FFC9FE7385
  2328. :1000A0002008CD40022F3200FFC9CD0A02C3E20270
  2329. :1000B000CB70C0DD210BFFDD7E02C603D83A00FF06
  2330. :1000C000E620DB80C2F901CD20023A02FFA7C82159
  2331. :1000D00003FF35C0773A04FFC3F901CB78C8DD21AF
  2332. :1000E00005FFCDDD01D8D380C3B402CB69C8DD21C3
  2333. :1000F0000BFF3A00FFE6802005CB60C8180B3A10D2
  2334. :10010000FFA72005DDCB0446C0CDDD01D8D300C953
  2335. :10011000DB4047DB40B820FED12100FC06FF4870E1
  2336. :1001200005237CB520F92100FC7EA9280C47E60FA9
  2337. :1001300028FE78E6F028FE18FE0D237CB520EAD5CF
  2338. :10014000DB03A720FE3E80D303DB03FE8020FE3EC0
  2339. :1001500003D300DB00D60320FED301DB01A720FE82
  2340. :10016000DB03D68020FED303DB03A720FE3E07D3AC
  2341. :1001700003DB03D60720FED301DB01A720FEC9CD98
  2342. :1001800071023E07D303AFD3013E03D304DB06CB9A
  2343. :100190007720FADB80D380C9AFDD2105FFDD770052
  2344. :1001A000DD7701DD77022100FCDD7403DD7704DDFE
  2345. :1001B0007705DD210BFFDD7700DD7701DD7702219B
  2346. :1001C00000FDDD7403DD7704DD77053E013201FFBC
  2347. :1001D0003E0D3204FFAF3202FF3203FFC9DD7E0560
  2348. :1001E000DD360500A7C0DDBE0237C8DD3502DD6E95
  2349. :1001F00001DD6603DD3401B6C9DD340228FEDD66AB
  2350. :1002000003DD6E0077DD3400A7C9CD5D022101FF5B
  2351. :10021000CB4628068787878777C9B63601C3F90199
  2352. :100220005F1F1F1F1FE60FFE0A3802C607C630CD2C
  2353. :10023000F9017BE60FFE0A3802C607C630C3F90192
  2354. :10024000DB05CB4728FADB00CD5D02878787876710
  2355. :10025000DB05CB4728FADB00CD5D02B4C9CBEFD676
  2356. :1002600030380CFE0AD8D627FE0A3803FE10D8AF65
  2357. :10027000C9DB03F680D303DB403200FFE60F8721A2
  2358. :1002800094025F1600197ED300237ED301DB03E6C0
  2359. :100290007FD303C905000A0014001B0028003500A5
  2360. :1002A00050006B00A0004001800200059405D106BB
  2361. :1002B000000A000FDD2105FFDDCB0446C83E28DD26
  2362. :1002C000BE02D83A00FFCB7F280DCB6FC02110FFB4
  2363. :1002D0007EA7C036111806DB04CBC7D304DDCB04E0
  2364. :1002E00086C9DD2105FFDDCB0446C03ED8DDBE0258
  2365. :1002F000D03A00FFCB7F280DCB6FC02110FF7EA727
  2366. :10030000C036131806DB04CB87D304DDCB04C6C983
  2367. :0000000000
  2368. SHAR_EOF
  2369. if test 2168 -ne "`wc -c < 'serial.hex'`"
  2370. then
  2371.     echo shar: error transmitting "'serial.hex'" '(should have been 2168 characters)'
  2372. fi
  2373. chmod +x 'serial.hex'
  2374. fi # end of overwriting check
  2375. #    End of shell archive
  2376. exit 0
  2377.  
  2378.